59 const std::string S_ToolName =
"customdbsample_extended";
60 const std::string S_ToolVersion =
"1.2";
67 " <redist-folder> <ticket> <product> <url-list-file> <custom-db-folder>\n"
68 " redist-folder - the folder where the DCA is installed to\n"
69 " ticket - a valid ticket\n"
70 " product - the product associated with your ticket\n"
71 " url-list-file - file that includes the URLs to classify\n"
72 " custom-db-folder - folder where the Custom Database is located\n\n"
75 volatile bool S_schedulerThreadError =
false;
76 volatile bool S_updateThreadError =
false;
83 # define DCA_BINDIR "bin/Win32"
85 # define DCA_BINDIR "bin/linux"
92 #define DCA_INITDIR "init"
97 #define DCA_LOGDIR "./logs"
121 static void SetupLicense(
const std::string& ticket,
const std::string& product,
124 licenseData.
ticket = ticket;
148 static void SetupCustomConnectionData(
const std::string& customdb_folder,
DbConnectionData& cData )
165 if( numOfCats == 0 ) {
166 std::cout <<
"No categories found." << std::endl;
175 const Category myCategory = myCategories.
byId( result );
176 const std::string catname = myCategory.
name(
"en_US" );
178 std::cout << (i+1) <<
".\t Category '" << catname <<
179 "' (id=" << myCategory.
id() <<
180 ", groupid=" << myCategory.
groupId() <<
191 std::cout <<
"IBM DCA Sample: " << S_ToolName <<
" (" << S_ToolVersion <<
")" << std::endl;
201 std::cout <<
"usage: " << name <<
S_UsageString << std::endl;
210 static void LoadUrlFile(
const std::string& fileName, std::vector<std::string>& urlList )
212 std::ifstream fstream( fileName.c_str(), std::ios::in );
213 if (!fstream.is_open())
return;
217 while ( std::getline(fstream, line) )
219 if( !line.empty() && line[line.length()-1] ==
'\r')
220 line.erase( line.length() - 1 );
223 urlList.push_back( line );
244 void TestUrlClassification(
const std::string& aUrlListFile,
const DcaInstance& myDca,
249 std::cout <<
"Starting custom & URL db classification routine..." << std::endl;
253 std::vector<std::string> myUrlList;
254 LoadUrlFile( aUrlListFile, myUrlList );
259 for( std::vector<std::string>::const_iterator U = myUrlList.begin(),
260 UEnd = myUrlList.end(); U != UEnd; ++U ) {
263 if( S_schedulerThreadError ) {
264 std::cerr <<
"Scheduler Thread got an error from DcaInstance::schedule() call. aborting." <<
269 if( S_updateThreadError ) {
270 std::cerr <<
"Updater Thread got an error from UpdateModule::performUpdate() call. aborting." <<
276 const std::string& myUrlString = *U;
278 std::cout <<
" Starting URL db classification for URL '" <<
279 myUrlString <<
"'" << std::endl;
288 std::cerr <<
"Error from custom URL db classification. Details: " << myFR.
getDescription() <<
289 " (" << myFR.
getReturnCode() <<
"). Continuing with next URL." << std::endl;
294 std::cout <<
"Got a match from Custom Database." << std::endl;
297 std::cout <<
"Results: URL '" << myUrlString <<
"' is not categorized (but known in database). "
298 <<
"Continuing with next URL" << std::endl;
301 std::cout <<
"Classification Results for URL '" << myUrlString <<
"'" << std::endl;
302 PrintResults( myCategoriesInfo, myUrlClassificationResults );
308 myFR = myUrlDbClassifier.
classify( myUrl, myUrlClassificationResults );
311 std::cerr <<
"Error from URL db classification. Details: " << myFR.
getDescription() <<
312 " (" << myFR.
getReturnCode() <<
"). Continuing with next URL." << std::endl;
318 std::cout <<
"Results: URL '" << myUrlString <<
"' is not known in the database. " <<
319 "Continuing with next URL." << std::endl;
326 std::cout <<
"Results: URL '" << myUrlString <<
"' is not categorized (but known in database). "
327 <<
"Continuing with next URL" << std::endl;
332 std::cout <<
"Classification Results for URL '" << myUrlString <<
"'" << std::endl;
333 PrintResults( myCategoriesInfo, myUrlClassificationResults );
335 std::cout <<
"Leaving URL db classification routine." << std::endl;
337 catch(
const ExDca& ex ) {
338 std::cerr <<
"DCA Exception occured in TestUrlClassification(). Details: " <<
341 catch(
const std::exception& s ) {
342 std::cerr <<
"std::exception occured in TestUrlClassification(). Details: " <<
343 s.what() <<
"." << std::endl;
346 std::cerr <<
"Unknown exception caught in TestUrlClassification()." << std::endl;
358 int main(
int argc,
char *argv[] )
371 std::string myRedistFolder = argv[ 1 ];
372 const std::string myTicket = argv[ 2 ];
373 const std::string myProduct = argv[ 3 ];
374 const std::string myUrlList = argv[ 4 ];
375 std::string myDbFolder = argv[ 5 ];
377 if( myRedistFolder.empty() || myTicket.empty() ||
378 myProduct.empty() || myUrlList.empty()||
379 myDbFolder.empty() ) {
385 char c = myRedistFolder[ myRedistFolder.length() - 1 ];
386 if( c !=
'/' && c !=
'\\' )
387 myRedistFolder +=
"/";
389 c = myDbFolder[ myDbFolder.length() - 1 ];
390 if( c !=
'/' && c !=
'\\' )
412 std::cout <<
"DCA is not licensed!" << std::endl;
417 SetupConnectionData( myDbConnectionData );
422 SetupCustomConnectionData( myDbFolder, myCustomDbConnectionData );
438 StartupThreads(myDca, myUpdateModule, &S_schedulerThreadError, &S_updateThreadError);
441 TestUrlClassification( myUrlList, myDca, myUrlDbClassifier, myUrlCustomDbClassifier, myCategoriesInfo );
449 catch(
const ExDca& ex ) {
453 catch(
const std::exception& s ) {
454 std::cerr <<
"std::exception occured. Details: " << s.what() <<
"." << std::endl;
458 std::cerr <<
"Unknown exception caught." << std::endl;
static DCA_MODULE_ID_TYPE ID
The unique ID of the URL classification module.
Is used to create a License object. A license first must be created with DcaInstance::createLicense t...
Exception class used in the DCA.
bool isCategorized() const
Returns whether or not the URL matched one or more categories.
static Url create(const DcaInstance &aDcaInstance, const std::string &urlString)
Standard Url creation function.
bool cancelUpdate() const
Cancels a currently running update process. If there is currently no update running,...
const DCA_CATEGORIES_INFO_TYPE DCA_CAT_INFO_TYPE_URL
Refers to the internal categories info for URL classification.
void InitCUrl()
Initializes libcurl. Do not use any DCA function before initializing libcurl.
std::string initDir
the directory in which the DCA init files are stored
bool signal(unsigned int signal) const
Cancels functions which could potentially take a long time to return, such as DcaInstance::schedule()...
static UpdateModule create(const DcaInstance &aDcaInstance, const License &aLicense, const ProxySettings &proxySettings=ProxySettings())
std::string getDescription() const
Returns a description of the error.
std::string configDir
Specifies the complete folder path where the custom database is located, or the folder in which it sh...
Definition of a container class for Category objects.
CategoriesInfo getCategoriesInfo(DCA_CATEGORIES_INFO_TYPE categoryType) const
Returns the DCA internal categories, groups and locales.
DbConnectionCustomData customData
Fill out this structure only if you are using a custom database.
DCA_RESULT_TYPE getReturnCode() const
Returns the last error code (if any).
FunctionResult classify(const Url &aUrl, UrlClassificationResults &urlResults) const
Performs the URL classification and returns the results.
static void SetupInitData(const std::string &redist_folder, InitData &initData)
Sets up the given initData by substituting the given redist_folder with DCA subdirectories.
The update module is used to download and install DCA content and engine updates.
std::string binDir
the directory in which the DCA binary (*.dca) files are stored
This header includes initialization/deinitialization support functions for the 3rd party libraries us...
A container class that allows access to the contained Categories, Groups and Locales.
void SetOpenSslCallbacks()
Initializes the required callbacks for OpenSSL when using HTTPS or SSL connections in a multi-threade...
const unsigned int DCA_SIG_ABORT
Currently the only supported signal parameter for the DcaInstance::signal() function.
Stores the connection data for a database.
void UnsetOpenSslCallbacks()
Unsets the openssl callbacks. Do not call any DCA function after you have called this function.
void StartupThreads(const dca::DcaInstance &aDcaInstance, const dca::UpdateModule &aUpdateModule, volatile bool *schedulerErrorSignal, volatile bool *performUpdateErrorSignal)
Starts up the update and schedule threads and supplies the given DcaInstance and UpdateModule.
DCA_CATEGORY_ID_TYPE id() const
The category id.
void ShutdownThreads()
Shuts down the previously started update and schedule threads.
void DeinitCUrl()
Deinitializes libcurl. Do not call any DCA function after you have called this function.
bool isUnknownUrl() const
Returns whether a URL is known or unknown. A URL is unknown if it is not contained in the database.
Database connection class for a local or remote database.
This header includes all header files of the URL Classification Package.
#define DCA_LOGDIR
Relative directory for logfile(s).
Main class for the URL classification.
#define DCA_INITDIR
DCA subdirectory of the DCA initialization data.
DCA_RESULT_TYPE getReturnCode() const
Gets the code of the error.
DCA_CATEGORY_ID_TYPE UrlClassificationResult
The item of an URL classification result is typedef'd as DCA_CATEGORY_ID_TYPE.
Results of an URL classification.
URL database classifier class.
static void PrintToolHeader()
Prints out the name and the version of this sample.
Use a License to initialize a classification package or a toolbox package.
Category byId(DCA_CATEGORY_ID_TYPE id) const
Returns the category with the given category id.
const DbType DBT_Custom
Used for DbConnection classes of custom databases.
bool isLicensed(DCA_MODULE_ID_TYPE id=0, bool force=false) const
Checks whether the given License is valid for the given module id.
std::string ticket
The ticket as provided in the license.
This header includes all header files of the DCA Base Package.
bool useLocalDatabase
Set to true to connect to a local or custom database, set to false to use a remote database.
Encapsulates the init and deinit of the DCA API.
std::string product
The product code used with the license.
const DbType DBT_Url
Used for DbConnection classes for URL classification.
static UrlClassification create(const DcaInstance &aDcaInstance, const License &aLicense)
Creates the URL classification module by using the given DcaInstance and License.
std::string logDir
the directory in which the DCA log file should be created
static void PrintUsage(const char *name)
Prints out the syntax of the sample.
size_t DCA_INDEX_TYPE
Type for index access (used for arrays and collections).
DbType dbType
The type of the database.
Categories getCategories() const
Returns the contained Categories.
Header file for functions related to start and stop the update and schedule threads.
std::string getDescription() const
Returns the description for the error or warning.
size_t DCA_SIZE_TYPE
Type for size (used for size of array and collections).
std::string name(const std::string &localeString=std::string()) const
Returns the localized (display) name of the category.
DCA_GROUP_ID_TYPE groupId() const
If the category is associated with a group, this is the group id.
#define DCA_BINDIR
DCA subdirectory of the DCA binaries.
Standard function result.
Encapsulates a URL object.
UrlDbClassifier createDbClassifier(const DbConnection &aDbConnection, const UrlDbClassifierOptions &options=UrlDbClassifierOptions()) const
Create a URL database classifier. The classifier is created by using the provided database connection...
const std::string S_UsageString
Usage string, displayed if a parameter is missing.
DbConnection createDbConnection(const License &aLicense, const DbConnectionData &dbcData, const ProxySettings &proxySettings=ProxySettings(), LogLevel aLogLevel=LOG_Initial) const
Creates a DbConnection object using the given DbConnectionData.
This structure is used to initialize the DcaInstance.
Encapsulates a category as defined in the categories XML schema (see Categories XML: Categories).
static DcaInstance create(const InitData &initData)
Creates a DcaInstance, starts up the DCA API and initializes the required main module.
static void SetupLicense(const std::string &ticket, const std::string &product, LicenseData &licenseData)
Sets up the given licenseData by copying the given ticket and product strings.
License createLicense(const LicenseData &licData, const ProxySettings &proxySettings=ProxySettings(), LogLevel aLogLevel=LOG_Initial) const
Creates a License object using the given LicenseData.
DCA_SIZE_TYPE size() const
Returns the number of results in the container.
int main(int argc, char *argv[])
The main routine.