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); }
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); }
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); }
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)); }
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 */ }
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); }
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); }
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); }