コード例 #1
0
bool std_work_decode( const json_t *val, struct work *work)
{
    int i;
    int data_size   = sizeof(work->data);
    int target_size = sizeof(work->target);
    int adata_sz    = ARRAY_SIZE(work->data);
    int atarget_sz  = ARRAY_SIZE(work->target);
 
    algo_gate.set_data_and_target_size( &data_size, &target_size,
            &adata_sz,  &atarget_sz, &allow_mininginfo );

    if (jsonrpc_2)
        return rpc2_job_decode(val, work);

    if (unlikely(!jobj_binary(val, "data", work->data, data_size)))
    {
       applog(LOG_ERR, "JSON invalid data");
       return false;
    }
    if (unlikely(!jobj_binary(val, "target", work->target, target_size)))
    {
       applog(LOG_ERR, "JSON invalid target");
       return false;
     }

     for (i = 0; i < adata_sz; i++)
           work->data[i] = le32dec(work->data + i);
     for (i = 0; i < atarget_sz; i++)
           work->target[i] = le32dec(work->target + i);
     return true;
}
コード例 #2
0
ファイル: util.c プロジェクト: GaneevR/ccminer-cryptonight
static bool stratum_2_job(struct stratum_ctx *sctx, json_t *params)
{
    bool ret = false;
    pthread_mutex_lock(&sctx->work_lock);
    ret = rpc2_job_decode(params, &sctx->work);
    pthread_mutex_unlock(&sctx->work_lock);
    return ret;
}
コード例 #3
0
ファイル: util.c プロジェクト: GaneevR/ccminer-cryptonight
bool stratum_authorize(struct stratum_ctx *sctx, const char *user, const char *pass)
{
	json_t *val = NULL, *res_val, *err_val;
	char *s, *sret;
	json_error_t err;
	bool ret = false;

	if(jsonrpc_2) {
        s = (char*)malloc(300 + strlen(user) + strlen(pass));
        sprintf(s, "{\"method\": \"login\", \"params\": {\"login\": \"%s\", \"pass\": \"%s\", \"agent\": \"cpuminer-multi/0.1\"}, \"id\": 1}",
                user, pass);
	} else {
        s = (char*)malloc(80 + strlen(user) + strlen(pass));
        sprintf(s, "{\"id\": 2, \"method\": \"mining.authorize\", \"params\": [\"%s\", \"%s\"]}",
                user, pass);
	}

	if (!stratum_send_line(sctx, s))
		goto out;

	while (1) {
		sret = stratum_recv_line(sctx);
		if (!sret)
			goto out;
		if (!stratum_handle_method(sctx, sret))
			break;
		free(sret);
	}

	val = JSON_LOADS(sret, &err);
	free(sret);
	if (!val) {
		applog(LOG_ERR, "JSON decode failed(%d): %s", err.line, err.text);
		goto out;
	}

	res_val = json_object_get(val, "result");
	err_val = json_object_get(val, "error");

	if (!res_val || json_is_false(res_val) ||
	    (err_val && !json_is_null(err_val)))  {
		applog(LOG_ERR, "Stratum authentication failed");
		goto out;
	}

    if(jsonrpc_2) {
        rpc2_login_decode(val);
        json_t *job_val = json_object_get(res_val, "job");
        pthread_mutex_lock(&sctx->work_lock);
        if(job_val) rpc2_job_decode(job_val, &sctx->work);
        pthread_mutex_unlock(&sctx->work_lock);
    }

	ret = true;

out:
	free(s);
	if (val)
		json_decref(val);

	return ret;
}