예제 #1
0
파일: jsonrpc.cpp 프로젝트: martyj/xptMiner
/*
 * Allows to directly send raw json data instead of generating it on the fly
 */
void jsonRpc_sendResponseRaw(jsonRpcServer_t* jrs, jsonRpcClient_t* client, fStr_t* fStr_responseRawData, char* additionalHeaderData)
{
	// build json request data
	// example: {"method": "getwork", "params": [], "id":0}
	fStr_t* fStr_jsonRequestData = fStr_alloc(1024*64); // 64KB (this is also used as the recv buffer!)
	fStr_appendFormatted(fStr_jsonRequestData, "{ \"result\": ");
	// { "result": "Hallo JSON-RPC", "error": null, "id": 1}
	fStr_append(fStr_jsonRequestData, fStr_responseRawData);
	fStr_append(fStr_jsonRequestData, ", \"error\": null, \"id\": 1}");
	// prepare header
	fStr_buffer1kb_t fStrBuffer_header;
	fStr_t* fStr_headerData = fStr_alloc(&fStrBuffer_header, FSTR_FORMAT_UTF8);
	// header fields
	fStr_appendFormatted(fStr_headerData, "HTTP/1.1 200 OK\r\n");
	fStr_appendFormatted(fStr_headerData, "Server: ypoolbackend 0.1\r\n");
	fStr_appendFormatted(fStr_headerData, "Connection: keep-alive\r\n"); // keep-alive
	fStr_appendFormatted(fStr_headerData, "Content-Type: application/json\r\n");
	fStr_appendFormatted(fStr_headerData, "Content-Length: %d\r\n", fStr_len(fStr_jsonRequestData));
	if( additionalHeaderData )
		fStr_appendFormatted(fStr_headerData, "%s", additionalHeaderData);
	fStr_appendFormatted(fStr_headerData, "\r\n"); // empty line concludes the header
	// send header and data
	send(client->clientSocket, fStr_get(fStr_headerData), fStr_len(fStr_headerData), 0);
	send(client->clientSocket, fStr_get(fStr_jsonRequestData), fStr_len(fStr_jsonRequestData), 0);
	fStr_free(fStr_jsonRequestData);
}
예제 #2
0
파일: jsonrpc.cpp 프로젝트: martyj/xptMiner
/*
 * Allows to directly send raw json data instead of generating it on the fly
 */
void jsonRpc_sendFailedToAuthorize(jsonRpcServer_t* jrs, jsonRpcClient_t* client)
{
	// build json request data
	// example: {"method": "getwork", "params": [], "id":0}
	fStr_t* fStr_jsonRequestData = fStr_alloc(1024*64); // 64KB (this is also used as the recv buffer!)
	fStr_append(fStr_jsonRequestData, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\""
		"\"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd\">"
		"<HTML>"
		"<HEAD>"
		"<TITLE>Error</TITLE>"
		"<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>"
		"</HEAD>"
		"<BODY><H1>401 Unauthorized.</H1></BODY>"
		"</HTML>"
		);
	// prepare header
	fStr_buffer1kb_t fStrBuffer_header;
	fStr_t* fStr_headerData = fStr_alloc(&fStrBuffer_header, FSTR_FORMAT_UTF8);
	// header fields
	fStr_appendFormatted(fStr_headerData, "HTTP/1.0 401 Authorization Required\r\n");
	fStr_appendFormatted(fStr_headerData, "Server: ypoolbackend 0.1\r\n");
	fStr_appendFormatted(fStr_headerData, "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n");
	fStr_appendFormatted(fStr_headerData, "Connection: keep-alive\r\n"); // keep-alive
	fStr_appendFormatted(fStr_headerData, "Content-Type: text/html\r\n");
	fStr_appendFormatted(fStr_headerData, "Content-Length: %d\r\n", fStr_len(fStr_jsonRequestData));
	fStr_appendFormatted(fStr_headerData, "\r\n"); // empty line concludes the header
	// send header and data
	send(client->clientSocket, fStr_get(fStr_headerData), fStr_len(fStr_headerData), 0);
	send(client->clientSocket, fStr_get(fStr_jsonRequestData), fStr_len(fStr_jsonRequestData), 0);
	fStr_free(fStr_jsonRequestData);
}
예제 #3
0
void NEWnotifyStats(){
	
	//			sprintf(sURL, "%s/report.php?key=%s&workerid=%s&start=%llu&blockstart=%llu&now=%llu&val=%g&primes=%u&sieves=%g&candidates=%g&shares=%u%s", 
	//			commandlineInput.centralServer, commandlineInput.csApiKey, curl_easy_escape(curl, jsonRequestTarget.authUser, 0), 
	//			primeStats.startTime, primeStats.primeLastUpdate, (uint64)getTimeMilliseconds(), primeStats.fShareValue, primeStats.primeChainsFound, 
	//			primeStats.nSieveRounds, primeStats.nCandidateCount, valid_shares, chains );

	
	fStr_buffer4kb_t fStrBuffer_parameter;
		fStr_t* fStr_parameter = fStr_alloc(&fStrBuffer_parameter, FSTR_FORMAT_UTF8);
		fStr_appendFormatted(fStr_parameter, "[\"key\":\"%s\"", commandlineInput.csApiKey); 
		fStr_appendFormatted(fStr_parameter, ",\"workerid\":\"%s\"", jsonRequestTarget.authUser);
		fStr_appendFormatted(fStr_parameter, ",\"start\":\"%u\"", primeStats.startTime);
		fStr_appendFormatted(fStr_parameter, ",\"blockstart\":\"%u\"", primeStats.primeLastUpdate);
		fStr_appendFormatted(fStr_parameter, ",\"now\":\"%u\"", (uint64)getTimeMilliseconds());
		fStr_appendFormatted(fStr_parameter, ",\"val\":\"%hf\"", primeStats.fShareValue);
		fStr_appendFormatted(fStr_parameter, ",\"primes\":\"%u\"", primeStats.primeChainsFound);
		fStr_appendFormatted(fStr_parameter, ",\"sieves\":\"%u\"", primeStats.nSieveRounds);
		fStr_appendFormatted(fStr_parameter, ",\"candidates\":\"%u\"", primeStats.nCandidateCount);
		fStr_appendFormatted(fStr_parameter, ",\"shares\":\"%d\"", valid_shares);
		for(int i=2; i<=std::max(6,(int)primeStats.bestPrimeChainDifficultySinceLaunch); i++){
			fStr_appendFormatted(fStr_parameter,",\"ch[%d]\":\"%d\"", i, primeStats.chainCounter[0][i]);
		}
	
		fStr_append(fStr_parameter, "]"); // finish constructing the request

		printf("JSON String: %s\n", fStr_get(fStr_parameter));

		printf("Stats server: %s\n", statsRequestTarget.ip);
		printf("Stats port: %u\n", statsRequestTarget.port);


		// send request
		sint32 rpcErrorCode = 0;
		char* command = "shareFound";
		jsonObject_t* jsonReturnValue = jsonClient_request(&statsRequestTarget, command, fStr_parameter, &rpcErrorCode);
		if( jsonReturnValue == NULL )
		{
			printf("Notify Stats failed :(\n");
		}
		else
		{
			// rpc call worked, sooooo.. is the server happy with the result?
			jsonObject_t* jsonReturnValueBool = jsonObject_getParameter(jsonReturnValue, "result");
			if( jsonObject_isTrue(jsonReturnValueBool) )
			{
				//jsonObject_t* jsonResult = jsonObject_getParameter(jsonReturnValue, "result");
				//jsonObject_t* jsonResult_data = jsonObject_getParameter(jsonResult, "data");
				//jsonObject_t* jsonResult_hash1 = jsonObject_getParameter(jsonResult, "hash1");
//				jsonObject_t* jsonResult_target = jsonObject_getParameter(jsonResult, "target");   unused?
				//jsonObject_t* jsonResult_serverData = jsonObject_getParameter(jsonResult, "serverData");
				//jsonObject_t* jsonResult_algorithm = jsonObject_getParameter(jsonResult, "algorithm");



		jsonObject_freeObject(jsonReturnValue);
			}
			else
			{
				// the server says no to this share :(
	//			printf("Server rejected share (BlockHeight: %u/%u nBits: 0x%08uX)\n", primecoinBlock->serverData.blockHeight, jhMiner_getCurrentWorkBlockHeight(primecoinBlock->threadIndex), primecoinBlock->serverData.client_shareBits);
				jsonObject_freeObject(jsonReturnValue);
			}
		}
//		jsonObject_freeObject(jsonReturnValue);


}