Exemplo n.º 1
0
/* Print errors to stderr if occured.
 * Returns true if error occured and false in normally case. */
bool get_file_hash(u256_t hash, const char * filepath)
{
    reader_state rs;
    u256_t message;

    if (open_reader(&rs, filepath))
    {
        print_error(stderr, rs.err_msg);
        return rs.err;
    }

    hasher_state hs;
    init_hasher(&hs);

    do
    {
        int cnt = read_u256(&rs, message);

        if (cnt < 1)
        {
            if (!rs.err && rs.eof)
            {
                break;
            }

            // Ignore possible close errors.
            close_reader(&rs);

            print_error(stderr, rs.err_msg);
            return rs.err;
        }

        make_hasher_step(&hs, message, cnt);
    }
    while (!rs.eof);

    // As defined in GOST R 34.11-94.
    if (rs.filesize == 0)
    {
        make_hasher_step(&hs, message, 0u);
    }

    if (close_reader(&rs))
    {
        print_error(stderr, rs.err_msg);
        return rs.err;
    }

    get_hash(hash, &hs);
    return rs.err;
}
Exemplo n.º 2
0
void process_command_connection(int con, int i2c_handle, bool verbose)
{
	char request[256];
	char *back;
	char response[256];

	struct line_reader reader;
	init_line_reader(&reader, read_from_socket, BUFFER_SIZE, &con);

	while (1) {

		int result = read_line(&reader, request, sizeof(request));
		if (result != 0) break;

		/* Get rid of any trailing \r or \n. */
		back = request + strlen(request) - 1;
		while (back >= request && (*back == '\n' || *back == '\r'))
			*(back--) = 0;

		if (verbose) printf("Request: %s\n", request);
		if (strncmp("ping", request, 4) == 0)
		{
			process_ping_command(request, response, sizeof(response));
		} 
		else if (strncmp("get", request, 3) == 0) {
			process_get_command(request, i2c_handle, response, sizeof(response));
		}
		else if (strncmp("set", request, 3) == 0) {
			process_set_command(request, i2c_handle, response, sizeof(response));
		}
		else if (strncmp("addpoll", request, 7) == 0) {
			process_add_poll_command(request, response, sizeof(response));
		}
		else if (strncmp("rmpoll", request, 5) == 0) {
			process_remove_poll_command(request, response, sizeof(response));
		}
		else if (strncmp("help", request, 4) == 0) {
			process_help(request, response, sizeof(response));
		}
		else 
		{
			fprintf(stderr, "ERROR: unknown command\n");
			strcpy(response, "ERROR\r\n");
		}

		if (verbose) printf("Response: %s", response);
		result = send(con, response, strlen(response), MSG_NOSIGNAL);
		if (result != strlen(response)) {
			fprintf(stderr, "ERROR: Error writing to socket\n");
			break;	
		}
	}

	close_reader(&reader);
}
Exemplo n.º 3
0
Arquivo: main.c Projeto: taysom/tau
void close_db(struct db *db)
{
    close_logger(db->w);
    close_reader(db->r);
    free_bag(db->bag);
}