summaryrefslogtreecommitdiff
path: root/tests/typedetect/test1.cpp
blob: cef3742fdd99c0f2421ad89d5bf3c792c745ebf1 (plain)
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
#ifdef USE_MODULELOADER
#include "TypeDetect.hpp"
#include "ModuleLoader.hpp"
#include "Fetcher.hpp"
#else
#include "LibMagicTypeDetect.hpp"
#include "FileFetcher.hpp"
#include "LibFetchFetcher.hpp"
#endif

#include "SimpleURLNormalizer.hpp"

#include <vector>
#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main( int argc, char *argv[] )
{
	if( argc < 4 ) {
		cerr << "usage: test1 <method> <fetcher> <URL>\n" << endl;
		return 1;
	}
	
	char *method = argv[1];
	char *fetcherMethod = argv[2];
	char *urlStr = argv[3];

#ifdef USE_MODULELOADER
	vector<string> modules;
	modules.push_back( "../../src/modules/typedetect/libmagic/mod_typedetect_libmagic.so" );
	ModuleLoader<TypeDetect> typeDetectors( modules );

	TypeDetect *typeDetect = typeDetectors.create( method );
#else
	TypeDetect *typeDetect;
	if( strcmp( method, "libmagic_typedetect" ) == 0 ) {
		typeDetect = new LibMagicTypeDetect( );
	} else {
		cerr << "Unknown type detection method '" << method << "'" << endl;
		return 1;
	}
#endif

#ifdef USE_MODULELOADER
#error TODO
#else
	Fetcher *fetcher;
	if( strcmp( fetcherMethod, "file_fetcher" ) == 0 ) {
		fetcher = new FileFetcher( );
	} else if( strcmp( fetcherMethod, "libfetch_fetcher" ) == 0 ) {
		fetcher = new LibFetchFetcher( );
	} else {
		cerr << "Unknown fetcher method '" << fetcherMethod << "'" << endl;
		return 1;
	}
#endif

	SimpleURLNormalizer normalizer;
	URL url = normalizer.parseUrl( urlStr );

	RewindInputStream *s = fetcher->fetch( url );
			
//	(void)typeDetect->detect( s );
//	s->rewind( );
	MIMEType type = typeDetect->detect( s );
	
	delete s;
	
#ifdef USE_MODULELOADER
	typeDetects.destroy( typeDetect );
#else
	delete typeDetect;
	delete fetcher;
#endif

	if( type == MIMEType::Null ) {
		cerr << "Unable to detect MIME type!" << endl;
		return 1;
	}
	
	cout	<< "MIME type: " << type << endl;

	return 0;
}