summaryrefslogblamecommitdiffstats
path: root/src/server/image.h
blob: 1a64b60955d07df6f84264e60f43fd5210e936a2 (plain) (tree)
1
2
3
4


                 
                      

























                                                                                                                           
 



                                                 

                                            









                                                        
      
#ifndef _IMAGE_H_
#define _IMAGE_H_

#include "../config.h"

typedef struct
{
	int fd;
} dnbd3_connection_t;

/**
 * Image struct. An image path could be something like
 * /mnt/images/rz/zfs/Windows7 ZfS.vmdk.1
 * and the lower_name would then be
 * rz/zfs/windows7 zfs.vmdk
 */
typedef struct
{
	char *path;            // absolute path of the image
	char *lower_name;      // relative path, all lowercase, minus revision ID
	uint8_t *cache_map;    // cache map telling which parts are locally cached, NULL if complete
	uint32_t *crc32;       // list of crc32 checksums for each 16MiB block in image
	dnbd3_connection_t *uplink; // pointer to a server connection
	uint64_t filesize;     // size of image
	int rid;               // revision of image
	int users;             // clients currently using this image
	time_t atime;          // last access time
	char working;          // TRUE if image exists and completeness is == 100% or a working upstream proxy is connected
	pthread_spinlock_t lock;
} dnbd3_image_t;

extern dnbd3_image_t *_images[SERVER_MAX_IMAGES];
extern int _num_images;
extern pthread_spinlock_t _images_lock;

int image_is_complete(dnbd3_image_t *image);

int image_save_cache_map(dnbd3_image_t *image);

dnbd3_image_t* image_get(char *name, uint16_t revision);

void image_release(dnbd3_image_t *image);

void image_load_all();



#endif