Ejemplo n.º 1
0
void
setUp(void) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;

  /* create. */
  ret = lagopus_dstring_create(&ds);
  TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret,
                            "lagopus_dstring_create error.");
  TEST_ASSERT_NOT_EQUAL_MESSAGE(NULL, ds,
                                "dstring is null.");

  ret = lagopus_dstring_create(&ds2);
  TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret,
                            "lagopus_dstring_create error.");
  TEST_ASSERT_NOT_EQUAL_MESSAGE(NULL, ds2,
                                "dstring is null.");
}
Ejemplo n.º 2
0
void
test_lagopus_dstring_create_null(void) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;

  /* create */
  ret = lagopus_dstring_create(NULL);

  TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_INVALID_ARGS, ret,
                            "lagopus_dstring_create error(NULL).");
}
Ejemplo n.º 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;
}
Ejemplo n.º 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;
}
Ejemplo n.º 5
0
lagopus_result_t
cmd_dump_main(lagopus_thread_t *thd,
              datastore_interp_t *iptr,
              void *conf,
              void *stream_out,
              datastore_printf_proc_t printf_proc,
              datastore_config_type_t ftype,
              char *file_name,
              cmd_dump_proc_t dump_proc) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;
  lagopus_dstring_t result = NULL;
  FILE *fp = NULL;
  mode_t old_mask;
  int fd;

  if (thd != NULL && iptr != NULL && conf != NULL &&
      stream_out !=NULL && printf_proc != NULL &&
      file_name != NULL) {
    /* start : sending large data. */
    if (ftype == DATASTORE_CONFIG_TYPE_STREAM_SESSION) {
      if ((ret = datastore_interp_blocking_session_set(
              iptr, (struct session *) stream_out, thd)) !=
          LAGOPUS_RESULT_OK) {
        lagopus_perror(ret);
        goto done;
      }
    }

    if ((ret = lagopus_dstring_create(&result)) !=
        LAGOPUS_RESULT_OK) {
      lagopus_perror(ret);
      goto done;
    }

    old_mask = umask(S_IRUSR | S_IWUSR);
    fd = mkstemp(file_name);
    (void) umask(old_mask);
    if (fd >= 0) {
      if ((fp = fdopen(fd, "w+")) != NULL) {
        unlink(file_name);
        ret = dump_proc(iptr, conf, fp,
                        stream_out, printf_proc,
                        &result);
        if (ret != LAGOPUS_RESULT_OK) {
          lagopus_perror(ret);
        }
        fclose(fp);
      } else {
        close(fd);
        ret = LAGOPUS_RESULT_POSIX_API_ERROR;
        lagopus_perror(ret);
      }
    } else {
      ret = LAGOPUS_RESULT_POSIX_API_ERROR;
      lagopus_perror(ret);
    }

 done:
    lagopus_dstring_destroy(&result);
    /* end : sending large data. */
    if (ftype == DATASTORE_CONFIG_TYPE_STREAM_SESSION) {
      datastore_interp_blocking_session_unset(
          iptr,(struct session *) stream_out);
    }
  } else {
    ret = LAGOPUS_RESULT_INVALID_ARGS;
    lagopus_perror(ret);
  }

  return ret;
}
Ejemplo n.º 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;
}
Ejemplo n.º 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;
}