Ejemplo n.º 1
0
size_t shjson_strlen(shjson_t *json, char *name)
{
  char *str = shjson_astr(json, name, "");
  if (!str)
    return (0);
  return ((size_t)strlen(str));
}
Ejemplo n.º 2
0
char *shjson_str(shjson_t *json, char *name, char *def_str)
{
  char *str = shjson_astr(json, name, def_str);
  if (!str)
    return (NULL);
  return (strdup(str));
}
Ejemplo n.º 3
0
int sharelog_list(shpeer_t *peer, time_t stime, time_t etime)
{
  shbuf_t *buff;
  fd_set read_fd;
  shjson_t *json;
  char tbuf[256];
  char *data;
  time_t now;
  char *str;
  int err;
  int fd;

  fd = shconnect_host("127.0.0.1", PROCESS_PORT, SHNET_ASYNC);
  if (fd < 0)
    return (fd);

  json = shjson_init(NULL);
  shjson_num_add(json, "id", 1);
  shjson_str_add(json, "method", "log.list");
  shjson_str_add(json, "key", (char *)shkey_print(shpeer_kpub(peer)));
  shjson_null_add(json, "params");

  str = shjson_print(json);
  shjson_free(&json);

  err = shnet_write(fd, str, strlen(str));
  free(str);
  if (err < 0) {
    shclose(fd);
    return (err);
  }

  err = shnet_write(fd, "\n", 1);
  if (err < 0) {
    shclose(fd);
    return (err);
  }

  while (1) {
    FD_ZERO(&read_fd);
    FD_SET(fd, &read_fd);
    err = shnet_verify(&read_fd, NULL, NULL);
    if (err < 0) {
      continue;
    }

    buff = shnet_read_buf(fd);
    if (!buff)
      break;

    data = shbuf_data(buff);
    if (!strchr(data, '\n'))
      continue;

    json = shjson_init(data);
    if (json) {
      char *text = shjson_astr(json, "result", NULL);
      if (text) {
        printf("%s", text);
      }
      shjson_free(&json);
    }

    break;
  }

  shclose(fd);

  return (0);
}
Ejemplo n.º 4
0
int sharelog_tail(shpeer_t *peer)
{
  shbuf_t *buff;
  fd_set read_fd;
  shjson_t *json;
  char tbuf[256];
  time_t stime, etime;
  time_t now;
  char *str;
  int err;
  int fd;

  fd = shconnect_host("127.0.0.1", PROCESS_PORT, SHNET_ASYNC);
  if (fd < 0)
    return (fd);

  json = shjson_init(NULL);
  shjson_num_add(json, "id", 1);
  shjson_str_add(json, "method", "log.subscribe");
  shjson_str_add(json, "key", (char *)shkey_print(shpeer_kpub(peer)));
  shjson_null_add(json, "params");

  str = shjson_print(json);
  shjson_free(&json);

  err = shnet_write(fd, str, strlen(str));
  free(str);
  if (err < 0) {
    shclose(fd);
    return (err);
  }

  err = shnet_write(fd, "\n", 1);
  if (err < 0) {
    shclose(fd);
    return (err);
  }

  while (proc_mode == RUN_TAIL) {
    FD_ZERO(&read_fd);
    FD_SET(fd, &read_fd);
    err = shnet_verify(&read_fd, NULL, NULL);
    if (err < 0) {
      continue;
    }

    buff = shnet_read_buf(fd);
    if (!buff || shbuf_size(buff) == 0)
      continue;

    json = shjson_init(shbuf_data(buff));
    if (json) {
      char *text = shjson_astr(json, "result", NULL);
      if (text) {
        now = time(NULL);
        strftime(tbuf, sizeof(tbuf) - 1, "%D %T", localtime(&now));
        printf("[%s] %s", tbuf, text);
      }
    }

    shbuf_clear(buff);
  }

  shclose(fd);

  return (0);
}