Ejemplo n.º 1
0
int sharedaemon_bcast_send_peer(shpeer_t *peer)
{
    struct sockaddr_in addr;
    socklen_t addr_len;
    struct timeval to;
    fd_set write_set;
    char dgram[512];
    ssize_t w_len;
    int fd;
    int err;

    fd = bcast_send_init();
    if (fd < 0) {
        fprintf(stderr, "DEBUG: sharedaemon_bcast_send: bcast_init error %d\n", err);
        return (err);
    }


    FD_ZERO(&write_set);
    FD_SET(fd, &write_set);

    /* nonblocking write */
    memset(&to, 0, sizeof(to));
    err = select(fd+1, NULL, &write_set, NULL, &to);
    if (err < 0) {
        close(fd);
        return (-errno);
    }
    if (err == 0) {
        close(fd);
        return (0); /* not able to send */
    }

    memset(dgram, 0, sizeof(dgram));
    memcpy(dgram, peer, sizeof(shpeer_t));

    addr_len = sizeof(addr);
    memset(&addr, 0, addr_len);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
    addr.sin_port = htons(SHARED_BROADCAST_PORT);
    w_len = sendto(fd,
                   dgram, sizeof(shpeer_t), 0, &addr, sizeof(addr));
    if (w_len < 0) {
        fprintf(stderr, "DEBUG: sharedaemon_bcast_send: sendto error: %s\n", strerror(errno));
        close(fd);
        return (-errno);
    }

    fprintf(stderr, "DEBUG: sharedaemon_bcast_send: peer \"%s\" <%d bytes>\n", shpeer_print(peer), w_len);
    fprintf(stderr, "DEBUG: peer pubkey: %s\n", shkey_print(shpeer_kpub(peer)));
    fprintf(stderr, "DEBUG: peer priv key: %s\n", shkey_print(shpeer_kpriv(peer)));


    /* close socket; only used once. */
    close(fd);

    return (0);
}
Ejemplo n.º 2
0
int inittx_ref(tx_ref_t *ref, tx_t *tx, char *name, char *hash, int type)
{
  shkey_t *tx_key;
  int err;

  memset(ref->ref.ref_name, 0, sizeof(ref->ref.ref_name));
  memset(ref->ref.ref_hash, 0, sizeof(ref->ref.ref_hash));

  /* attributes */
  if (name)
    strncpy(ref->ref.ref_name, name, sizeof(ref->ref.ref_name)-1); 
  if (hash)
    strncpy(ref->ref.ref_hash, hash, sizeof(ref->ref.ref_hash)-1); 
  ref->ref.ref_type = type;
  ref->ref.ref_level = tx->tx_op;

  /* origin peer */
  memcpy(&ref->ref.ref_peer, &tx->tx_peer, sizeof(ref->ref.ref_peer));

  /* populate unique key into 'external hash reference' if none specified. */
  if (!*ref->ref.ref_hash) {
    tx_key = get_tx_key(tx);
    if (tx_key)
      memcpy(&ref->ref.ref_hash, shkey_print(tx_key), sizeof(ref->ref.ref_hash));
  }

  /* generate new reference */
  err = tx_init(NULL, (tx_t *)ref, TX_REFERENCE);
  if (err)
    return (err);

  return (0);
}
Ejemplo n.º 3
0
char *oauth_api_token(shd_t *api_cli, shmap_t *sess)
{
  static char ret_buf[MAX_SHARE_HASH_LENGTH];
  char *token;
  char *login;
  int err;

  token = shmap_get_str(sess, ashkey_str("access_token"));
  if (!token) {
    shkey_t *cli_k = shkey_gen(oauth_sess_token(sess));
    shkey_t *serv_k = oauth_sess_id(api_cli);
    shkey_t *key;

    key = shkey_xor(cli_k, serv_k);
    shkey_free(&cli_k);
    shkey_free(&serv_k);

    token = shkey_print(key);
    shmap_set_astr(sess, "access_token", token);
    shkey_free(&key);
  }

  memset(ret_buf, 0, sizeof(ret_buf));
  strncpy(ret_buf, token, sizeof(ret_buf)-1);

  return (ret_buf);
}
Ejemplo n.º 4
0
void info_table_add_key(info_table_t *table, char *col_name, shkey_t *key)
{
  int idx;

  if (!key || shkey_cmp(ashkey_blank(), key))
    return;

  if (!(run_flags & PFLAG_VERBOSE))
    return;

  idx = info_table_column(table, col_name);
  if (idx != -1)
    table->row->col[idx] = strdup(shkey_print(key));
}
Ejemplo n.º 5
0
static int _lfunc_sexe_shkey(lua_State *L) 
{
  shkey_t *key;
  char *seed;
  int seed_num;

  seed = luaL_checkstring(L, 1);
  if (!seed)
    seed_num = luaL_checknumber(L, 1);

  if (seed)
    key = shkey_str(seed);
  else
    key = shkey_num(seed_num);

  lua_pushstring(L, shkey_print(key));

  shkey_free(&key);
  return (1); /* (1) string key */
}
Ejemplo n.º 6
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.º 7
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);
}
Ejemplo n.º 8
0
void sched_tx_payload(shkey_t *dest_key, void *data, size_t data_len, void *payload, size_t payload_len)
{
  tx_t *tx = (tx_t *)data;
  tx_t sig_tx;
  tx_net_t net;
  shsig_t sig;
  shsig_t new_sig;
  shbuf_t *buff;
  shpeer_t *self_peer;

  if (!data)
    return;
  if (data_len < sizeof(tx_t))
    return;

  prep_net_tx(tx, &net, dest_key, data_len + payload_len); 

  buff = shbuf_init();
  shbuf_cat(buff, &net, sizeof(tx_net_t));
  shbuf_cat(buff, data, data_len);
  if (payload && payload_len)
    shbuf_cat(buff, payload, payload_len);
tx_wrap(NULL, shbuf_data(buff) + sizeof(tx_net_t));
  broadcast_raw(shbuf_data(buff), shbuf_size(buff));
  shbuf_free(&buff);

fprintf(stderr, "DEBUG: SEND: sched_tx_payload: [OP %d] hash(%s) peer(%s) stamp(%llu) nonce(%d) method(%d) OP(%d)\n", (int)tx->tx_op, tx->hash, shkey_print(&tx->tx_peer), (unsigned long long)tx->tx_stamp, (int)tx->nonce, TXHASH_SCRYPT, (int)tx->tx_op);
}