/usr/include/licq/plugin/protocolpluginfactory.h is in licq-dev 1.8.2-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | /*
* This file is part of Licq, an instant messaging client for UNIX.
* Copyright (C) 2013 Licq Developers <licq-dev@googlegroups.com>
*
* Please refer to the COPYRIGHT file distributed with this source
* distribution for the names of the individual contributors.
*
* Licq 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 2 of the License, or
* (at your option) any later version.
*
* Licq 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 Licq; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef LICQ_PROTOCOLPLUGINFACTORY_H
#define LICQ_PROTOCOLPLUGINFACTORY_H
#include "pluginfactory.h"
#include <boost/shared_ptr.hpp>
namespace Licq
{
class Owner;
class ProtocolPluginInterface;
class User;
class UserId;
/**
* Factory for protocol plugins implementing support for an IM protocol
*/
class ProtocolPluginFactory : public PluginFactory
{
public:
/// Return the protocol's unique identifier
virtual unsigned long protocolId() const = 0;
/**
* Return the protocol plugin's supported features
*
* @return A mask of bits from Capabilities enum
*/
virtual unsigned long capabilities() const = 0;
/// Create a new plugin instance
virtual ProtocolPluginInterface* createPlugin() = 0;
/**
* Create a user object
*
* Called by UserManager when users are loaded or added.
*
* @param id User id
* @param temporary True if user isn't permanently added to contact list
* @return A newly created user object or NULL if the protocol doesn't have
* a specialized user class.
*/
virtual User* createUser(const UserId& id, bool temporary) = 0;
/**
* Create an owner object
*
* Called by UserManager when owner is loaded or added.
*
* @param id User id of owner
* @return A newly created owner object or NULL if the protocol doesn't have
* a specialized owner class.
*/
virtual Owner* createOwner(const UserId& id) = 0;
protected:
virtual ~ProtocolPluginFactory() { /* Empty */ }
};
/**
* This struct contains the initial data and functions needed by Licq to load a
* protocol plugin. Use the LICQ_PROTOCOL_PLUGIN_DATA macro to create it.
*/
struct ProtocolPluginData
{
/// Magic value to identify an Licq protocol
char magic[4];
/// Version of Licq this plugin is built for
int licqVersion;
/// Pointer to a function that creates and returns a factory object.
ProtocolPluginFactory* (*createFactory)();
/// Called to destroy the factory when it is no longer needed
void (*destroyFactory)(ProtocolPluginFactory* factory);
};
} // namespace Licq
#ifdef __cplusplus
extern "C" {
#endif
/**
* Each protocol must contain the following symbol
*
* When a protocol is first loaded, this pointer is fetched and used to get
* the ProtocolPluginData struct for the plugin.
*/
extern Licq::ProtocolPluginData LicqProtocolPluginData;
#ifdef __cplusplus
}
#endif
/*
* Convenience macro to define protocol data in a plugin
*
* Note: <licq/version.h> must be included
*
* @param create Pointer to the create factory function
* @param destroy Pointer to the destroy factory function
*/
#define LICQ_PROTOCOL_PLUGIN_DATA(create, destroy) \
Licq::ProtocolPluginData LicqProtocolPluginData = \
{ {'L', 'i', 'c', 'q' }, LICQ_VERSION, create, destroy }
#endif
|