示例#1
0
static void
_dump_chunks_xml_NORMAL(const struct loc_context_s *lc, GString **s)
{
	chunk_pair_t *current = NULL;

	for(guint i=0; i < lc->rc->pairs->len; i++) {
		current = &g_array_index(lc->rc->pairs, chunk_pair_t, i);
		GByteArray *hash = CHUNKS_get_hash(current->chunk);
		char str_hash[1 + sizeof(chunk_hash_t) * 2];
		oio_str_bin2hex(hash->data, hash->len, str_hash, sizeof(str_hash));
		char *loc = _chunk_location_row_xml(lc,
			CHUNKS_get_id(current->chunk)->str, "");
		g_string_append_printf(*s, 
				"   <chunk>\n"
				"    <locations>\n"
				"%s"
				"    </locations>\n"
				"    <position>%d</position>\n"
				"    <size>%"G_GINT64_FORMAT"</size>\n"
				"    <md5>%s</md5>\n"
				"   </chunk>\n",
				loc,
				current->position.meta,
				CHUNKS_get_size(current->chunk),
				str_hash);
		g_free(loc);
	}
}
示例#2
0
static void
_dump_chunks_xml_DUPLI(const struct loc_context_s *lc, GString **s)
{

	chunk_pair_t *base = NULL;
	chunk_pair_t *current = NULL;
	int copies = 0;
	GString *urls = NULL;

	void _append(void) {
		GByteArray *hash = CHUNKS_get_hash(base->chunk);
		char str_hash[1 + sizeof(chunk_hash_t) * 2];
		oio_str_bin2hex(hash->data, hash->len, str_hash, sizeof(str_hash));
		g_string_append_printf(*s,
				"   <chunk>\n"
				"    <nb-copies>%d</nb-copies>"
				"    <locations>\n"
				"%s"
				"    </locations>\n"
				"    <position>%d</position>\n"
				"    <size>%"G_GINT64_FORMAT"</size>\n"
				"    <md5>%s</md5>\n"
				"   </chunk>\n",
				copies,
				urls->str,
				base->position.meta,
				CHUNKS_get_size(base->chunk),
				str_hash);
		g_string_free(urls, TRUE);
	}
示例#3
0
int
main(int argc, char ** args)
{
	int i;

	for (i=1; i<argc ;i++) {

		struct hc_url_s *url = hc_url_oldinit(args[i]);

		if (url && NULL != hc_url_get_id(url)) {
			memset(str_id, 0, sizeof(str_id));
			oio_str_bin2hex(hc_url_get_id(url), hc_url_get_id_size(url),
					str_id, sizeof(str_id));
			fputs(str_id, stdout);
		}
		else {
			fputs(bad, stdout);
		}

		fputc(' ', stdout);
		fputs(args[i], stdout);
		fputc('\n', stdout);

		if (url)
			hc_url_clean(url);
	}

	fflush(stdout);
	return 0;
}
static gboolean
_zmq2agent_manage_event (guint32 r, struct _zmq2agent_ctx_s *ctx, zmq_msg_t *msg)
{
	const time_t now = oio_ext_monotonic_seconds();
	if (!ctx->zagent) return TRUE;

	const size_t len = zmq_msg_size(msg);
	struct event_s *evt = g_malloc (sizeof(struct event_s) + len);
	memcpy (evt->message, zmq_msg_data(msg), len);
	evt->last_sent = now;
	evt->rand = r;
	evt->evtid = ctx->q->counter ++;
	evt->procid = ctx->q->procid;
	evt->size = len;
	evt->recv_time = evt->last_sent;

	ctx->pending_events = g_list_prepend (ctx->pending_events, evt);
	ctx->q->gauge_pending ++;

	gchar strid[1+ 2*HEADER_SIZE];
	oio_str_bin2hex(evt, HEADER_SIZE, strid, sizeof(strid));
	GRID_DEBUG("EVT:DEF %s (%u) %.*s", strid,
			ctx->q->gauge_pending, evt->size, evt->message);

	return _zmq2agent_send_event (now, ctx, evt, strid);
}
示例#5
0
文件: rawx.c 项目: korween/oio-sds
static void
chunk_id2str (const gs_chunk_t *chunk, char *d, size_t dS)
{
	EXTRA_ASSERT(chunk);
	EXTRA_ASSERT(d);
	oio_str_bin2hex (chunk->ci->id.id, sizeof(chunk->ci->id.id), d, dS);
}
示例#6
0
static void
_dump_cid (const char *s)
{
	static gchar bad[] = {
		'-', '-', '-', '-', '-', '-', '-', '-',
		'-', '-', '-', '-', '-', '-', '-', '-',
		'-', '-', '-', '-', '-', '-', '-', '-',
		'-', '-', '-', '-', '-', '-', '-', '-',
		'-', '-', '-', '-', '-', '-', '-', '-',
		'-', '-', '-', '-', '-', '-', '-', '-',
		'-', '-', '-', '-', '-', '-', '-', '-',
		'-', '-', '-', '-', '-', '-', '-', '-',
		0
	};

	char str_id[128];
	const char *dst;
	struct oio_url_s *url = oio_url_init (s);

	if (url && NULL != oio_url_get_id(url)) {
		memset(str_id, 0, sizeof(str_id));
		oio_str_bin2hex(oio_url_get_id(url), oio_url_get_id_size(url),
				str_id, sizeof(str_id));
		dst = str_id;
	}
	else {
		dst = bad;
	}

	g_print("%s %s\n", dst, s);
	oio_url_clean(url);
}
示例#7
0
文件: ext.c 项目: rootfs/oio-sds
void
oio_ext_set_random_reqid (void)
{
	struct {
		pid_t pid:16;
		guint8 buf[14];
	} bulk;
	bulk.pid = getpid();
	oio_str_randomize(bulk.buf, sizeof(bulk.buf));

	char hex[33];
	oio_str_bin2hex((guint8*)&bulk, sizeof(bulk), hex, sizeof(hex));
	oio_ext_set_reqid(hex);
}
示例#8
0
static void
_dump_addr (const char *s)
{
	gchar str[256], hexa[1024];
	struct addr_info_s addr;

	if (grid_string_to_addrinfo(s, &addr)) {
		memset(str, 0, sizeof(str));
		grid_addrinfo_to_string(&addr, str, sizeof(str));
		memset(hexa, 0, sizeof(hexa));
		oio_str_bin2hex(&addr, sizeof(addr), hexa, sizeof(hexa));
		g_print("%s %s\n", str, hexa);
	}
}
static void
_retry_events (struct _zmq2agent_ctx_s *ctx)
{
	gchar strid[1+(2*HEADER_SIZE)];
	const time_t now = oio_ext_monotonic_seconds ();
	const time_t oldest = now > 5 ? now - 5 : 0;

	for (GList *l=g_list_last(ctx->pending_events); l ;l=l->prev) {
		struct event_s *evt = l->data;
		if (evt->last_sent < oldest) {
			oio_str_bin2hex(evt, HEADER_SIZE, strid, sizeof(strid));
			if (!_zmq2agent_send_event (now, ctx, evt, strid))
				break;
		}
	}
}
示例#10
0
// TODO: factorize with _gen_chunk() from meta2_utils.c
static gpointer
_gen_chunk_bean(const char *straddr)
{
	guint8 binid[32];
	gchar strid[65];
	gchar *chunkid = NULL;
	struct bean_CHUNKS_s *chunk = NULL;

	oio_buf_randomize (binid, sizeof(binid));
	oio_str_bin2hex (binid, sizeof(binid), strid, sizeof(strid));
	chunk = _bean_create(&descr_struct_CHUNKS);
	chunkid = m2v2_build_chunk_url (straddr, strid);
	CHUNKS_set2_id(chunk, chunkid);

	g_free(chunkid);
	return (gpointer)chunk;
}
示例#11
0
static void
_log_reqid(GString *gs, MESSAGE req)
{
	g_string_append_c(gs, ' ');

	gsize field_len=0;
	void *field = metautils_message_get_ID(req, &field_len);
	if (!field || !field_len)
		g_string_append_c(gs, '_');
	else {
		gsize max = field_len * 2 + 2;
		char *hex;
		
		hex = g_alloca(max);
		memset(hex, 0, max);
		oio_str_bin2hex(field, field_len, hex, max);
		g_string_append(gs, (gchar*)hex);
	}
}
示例#12
0
static void
test_bin (void)
{
	guint8 buf[64];
	gchar str[129];

	g_assert_false (oio_str_hex2bin ("0", buf, sizeof(buf)));
	g_assert_false (oio_str_hex2bin ("x", buf, sizeof(buf)));

	g_assert_false (oio_str_hex2bin ("0x", buf, sizeof(buf)));

	g_assert_true  (oio_str_hex2bin ("00", buf, 1));
	g_assert_false (oio_str_hex2bin ("0000", buf, 1));

	g_assert_true (oio_str_hex2bin ("00", buf, sizeof(buf)));
	g_assert_true (buf[0] == 0);
	g_assert (2 == oio_str_bin2hex (buf, 1, str, sizeof(str)));
	g_assert (!g_ascii_strcasecmp(str, "00"));
}
static void
_zmq2agent_manage_ack (struct _zmq2agent_ctx_s *ctx, zmq_msg_t *msg)
{
	if (zmq_msg_size (msg) != HEADER_SIZE)
		return;

	gchar strid[1+(2*HEADER_SIZE)];
	void *d = zmq_msg_data (msg);
	oio_str_bin2hex(d, HEADER_SIZE, strid, sizeof(strid));

	GList *li = g_list_find_custom (ctx->pending_events, d, _cmp);
	if (!li) {
		GRID_INFO("EVT:OUT %s", strid);
		++ ctx->q->counter_ack_notfound;
	} else {
		GRID_DEBUG("EVT:ACK %s", strid);
		ctx->pending_events = g_list_remove_link (ctx->pending_events, li);
		g_list_free_full (li, g_free);
		-- ctx->q->gauge_pending;
		++ ctx->q->counter_ack;
	}
}
示例#14
0
gboolean
rawx_client_get_directory_data(rawx_session_t * session, hash_sha256_t chunk_id, struct content_textinfo_s *content,
    struct chunk_textinfo_s *chunk, GError ** error)
{
	int rc;
	gchar str_addr[64];
	gsize str_addr_size;
	gchar str_req[2048];
	gchar str_chunk_id[(sizeof(hash_sha256_t) * 2) + 1];
	GHashTable *result = NULL;
	GByteArray *buffer = NULL;
	ne_request *request = NULL;

	if (!session) {
		GSETERROR(error, "Invalid parameter");
		return FALSE;
	}

	memset(str_chunk_id, '\0', sizeof(str_chunk_id));
	oio_str_bin2hex(chunk_id, sizeof(hash_sha256_t), str_chunk_id, sizeof(str_chunk_id));

	memset(str_req, '\0', sizeof(str_req));
	snprintf(str_req, sizeof(str_req) - 1, "%s/%s", RAWX_REQ_GET_DIRINFO, str_chunk_id);

	ne_set_connect_timeout(session->neon_session, session->timeout.cnx / 1000);
	ne_set_read_timeout(session->neon_session, session->timeout.req / 1000);
	request = ne_request_create(session->neon_session, "HEAD", str_req);
	if (!request) {
		GSETERROR(error, "neon request creation error");
		return FALSE;
	}

	buffer = g_byte_array_new();
	ne_add_response_body_reader(request, ne_accept_2xx, body_reader, buffer);

	switch (rc = ne_request_dispatch(request)) {
		case NE_OK:
			if (ne_get_status(request)->klass != 2) {
				GSETERROR(error, "RAWX returned an error %d : %s",
						ne_get_status(request)->code, ne_get_status(request)->reason_phrase);
				goto error;
			}
			else if (!(result = header_parser(request))) {
				GSETERROR(error, "No attr from the RAWX server");
				goto error;
			}
			break;
		case NE_ERROR:
		case NE_TIMEOUT:
		case NE_CONNECT:
		case NE_AUTH:
			str_addr_size = addr_info_to_string(&(session->addr), str_addr, sizeof(str_addr));
			GSETERROR(error, "cannot download the data from [%.*s]' (%s)",
					(int)str_addr_size, str_addr, ne_get_error(session->neon_session));
			goto error;
		default:
			GSETERROR(error, "Unexpected return code from the neon library : %d", rc);
			goto error;
	}

	g_byte_array_free(buffer, TRUE);
	ne_request_destroy(request);

	/* Fill the textinfo structs */
	parse_chunkinfo_from_rawx(result, content, chunk);
	g_hash_table_destroy(result);
	return TRUE;

error:
	g_byte_array_free(buffer, TRUE);
	ne_request_destroy(request);

	return FALSE;
}
示例#15
0
文件: rawx.c 项目: korween/oio-sds
static gboolean
_rawx_update_chunk_attrs(chunk_id_t *cid, GSList *attrs, GError **err)
{
	ne_session *s = NULL;
	ne_request *r = NULL;
	int ne_rc;
	gboolean result = FALSE;

	gchar dst[128];
	guint16 port = 0;
	GString *req_str = NULL;
	char idstr[65];

	if (!addr_info_get_addr(&(cid->addr), dst, sizeof(dst), &port))
		return result;

	s = ne_session_create("http", dst, port);
	if (!s) {
		GSETERROR(err, "Failed to create session to rawx %s:%d", dst, port);
		return result;
	}

	ne_set_connect_timeout(s, 10);
	ne_set_read_timeout(s, 30);

	req_str =g_string_new("/rawx/chunk/set/");
	oio_str_bin2hex (&(cid->id), sizeof(cid->id), idstr, sizeof(idstr));
	req_str = g_string_append(req_str, idstr);
	GRID_TRACE("Calling %s", req_str->str);

	r = ne_request_create (s, "GET", req_str->str);
	if (!r) {
		goto end_attr;
	}

	for (; attrs != NULL; attrs = attrs->next) {
		struct chunk_attr_s *attr = attrs->data;
		ne_add_request_header(r, attr->key, attr->val);
	}

	switch (ne_rc = ne_request_dispatch(r)) {
		case NE_OK:
			result = TRUE;
			break;
		case NE_ERROR:
			GSETCODE(err, CODE_INTERNAL_ERROR, "Request NE_ERROR");
			break;
		case NE_TIMEOUT:
			GSETCODE(err, CODE_INTERNAL_ERROR, "Request Timeout");
			break;
		case NE_CONNECT:
			GSETCODE(err, CODE_INTERNAL_ERROR, "Request Connection timeout");
			break;
		default:
			GSETCODE(err, CODE_INTERNAL_ERROR, "Request failed");
			break;
	}

end_attr:
	if (NULL != req_str)
		g_string_free(req_str, TRUE);
	if (NULL != r)
		ne_request_destroy (r);
	if (NULL != s)
		ne_session_destroy (s);

	return result;
}
示例#16
0
static void
_random_string (gchar *d, gsize dlen)
{
	RANDOM_UID (uid,uidlen);
	oio_str_bin2hex ((void*)&uid, uidlen, d, dlen);
}
示例#17
0
gsize
container_id_to_string(const container_id_t id, gchar * dst, gsize dstsize)
{
	return oio_str_bin2hex(id, sizeof(container_id_t), dst, dstsize);
}