blob: 0637c270d3b94f2f9e453103f9febfa7e49aa17c [file] [log] [blame]
/*
Copyright (C) 2006-2010 Werner Dittmann
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <libzrtpcpp/ZIDRecord.h>
#ifndef _ZIDFILE_H_
#define _ZIDFILE_H_
/**
* @file ZIDFile.h
* @brief ZID file management
*
* A ZID file stores (caches) some data that helps ZRTP to achives its
* key continuity feature. See @c ZIDRecord for further info which data
* the ZID file contains.
*
* @ingroup GNU_ZRTP
* @{
*/
/**
* This class implements a ZID (ZRTP Identifiers) file.
*
* The ZID file holds information about peers.
*
* @author: Werner Dittmann <Werner.Dittmann@t-online.de>
*/
class __EXPORT ZIDFile {
private:
FILE* zidFile;
unsigned char associatedZid[IDENTIFIER_LEN];
/**
* The private ZID file constructor.
*
*/
ZIDFile(): zidFile(NULL) {};
~ZIDFile();
void createZIDFile(char* name);
void checkDoMigration(char* name);
public:
/**
* Get the an instance of ZIDFile.
*
* This method just creates an instance an store a pointer to it
* in a static variable. The ZIDFile is a singleton, thus only
* <em>one</em> ZID file can be open at one time.
*
* @return
* A pointer to the global ZIDFile singleton instance.
*/
static ZIDFile* getInstance();
/**
* Open the named ZID file and return a ZID file class.
*
* This static function either opens an existing ZID file or
* creates a new ZID file with the given name. The ZIDFile is a
* singleton, thus only <em>one</em> ZID file can be open at one
* time.
*
* To open another ZID file you must close the active ZID file
* first.
*
* @param name
* The name of the ZID file to open or create
* @return
* 1 if file could be opened/created, 0 if the ZID instance
* already has an open file, -1 if open/creation of file failed.
*/
int open(char *name);
/**
* Check if ZIDFile has an active (open) file.
*
* @return
* True if ZIDFile has an active file, false otherwise
*/
bool isOpen() { return (zidFile != NULL); };
/**
* Close the ZID file.
* Closes the ZID file, and prepares to open a new ZID file.
*/
void close();
/**
* Get a ZID record from the active ZID file.
*
* The method get the identifier data from the ZID record parameter,
* locates the record in the ZID file and fills in the RS1, RS2, and
* other data.
*
* If no matching record exists in the ZID file the method creates
* it and fills it with default values.
*
* @param zidRecord
* The ZID record that contains the identifier data. The method
* fills in data .
* @return
* Currently always 1 to indicate sucess
*/
unsigned int getRecord(ZIDRecord* zidRecord);
/**
* Save a ZID record into the active ZID file.
*
* This method saves the content of a ZID record into the ZID file. Before
* you can save the ZID record you must have performed a getRecord()
* first.
*
* @param zidRecord
* The ZID record to save.
* @return
* 1 on success
*/
unsigned int saveRecord(ZIDRecord *zidRecord);
/**
* Get the ZID associated with this ZID file.
*
* @return
* Pointer to the ZID
*/
const unsigned char* getZid() { return associatedZid; };
};
/**
* @}
*/
#endif
/** EMACS **
* Local variables:
* mode: c++
* c-default-style: ellemtel
* c-basic-offset: 4
* End:
*/