31 #include <sys/socket.h>
32 #include <arpa/inet.h>
34 #include <netinet/in.h>
43 #include <openssl/ssl.h>
44 #include <openssl/err.h>
54 vector<string>::iterator itr;
56 output <<
"(PLUGIN_TYPE: " << setw(12) << setfill(
' ') << setiosflags(ios::left) << p.plugin_type <<
" ";
57 output <<
" PLUGIN_ID: " << setw(12) << setfill(
' ') << setiosflags(ios::left) << p.plugin_name <<
" ";
58 output <<
" IP: " << setw(12) << p.local_ip_address;
60 output <<
" TLS_PORT: " << p.port <<
")";
62 output <<
" RAW_PORT: " << p.port <<
")";
66 output << fwork->get_cur_time();
67 output <<
"(PLUGIN_TYPE: " << setw(12) << setfill(
' ') << setiosflags(ios::left) << p.plugin_type <<
" ";
68 output <<
" ALIAS PLUGIN_ID: " << setw(12) << setfill(
' ') << setiosflags(ios::left) << (*itr) <<
" ";
69 output <<
" IP: " << setw(12) << p.local_ip_address;
71 output <<
" TLS_PORT: " << p.port <<
")";
73 output <<
" RAW_PORT: " << p.port <<
")";
83 plugin_type = rhs.plugin_type;
84 plugin_number = rhs.plugin_number;
85 plugin_name = rhs.plugin_name;
88 plugin_conf_file = rhs.plugin_conf_file;
89 networking = rhs.networking;
90 verbose_level = rhs.verbose_level;
91 tls_enabled = rhs.tls_enabled;
92 thread_id = rhs.thread_id;
96 local_ip_address = rhs.local_ip_address;
103 int generic_plugin::clear_aliases()
105 this->v_plugin_aliases.clear();
110 int generic_plugin::set_plugin(
string in_plugin)
112 this->plugin_type = in_plugin;
117 int generic_plugin::set_conf_file(
string conf_file)
119 plugin_conf_file = conf_file;
124 int generic_plugin::set_plugin_name(
string in_plugin_name)
126 plugin_name = in_plugin_name;
131 int generic_plugin::set_plugin_number(
string in_plugin_number)
133 plugin_number = in_plugin_number;
138 int generic_plugin::set_plugin_path(
string plugin_path)
140 plugin_lib_path = plugin_path;
145 int generic_plugin::set_tls_flag(
int in_tls_flag)
147 tls_enabled = in_tls_flag;
152 int generic_plugin::set_socket(SOCKET in_socket)
154 server_socket = in_socket;
159 int generic_plugin::set_client_socket(SOCKET in_socket)
161 client_socket = in_socket;
166 int generic_plugin::set_port(
int in_port)
173 int generic_plugin::add_plugin_alias(
string plugin_alias)
175 v_plugin_aliases.push_back(plugin_alias);
180 bool generic_plugin::find_plugin_alias(
string alias_name)
182 vector<string>::iterator itr;
183 for(itr = v_plugin_aliases.begin(); itr != v_plugin_aliases.end(); ++itr)
184 if((*itr) == alias_name)
190 int generic_plugin::aliases_count()
192 return(v_plugin_aliases.size());
196 string generic_plugin::pop_alias()
200 alias_name = v_plugin_aliases.front();
201 v_plugin_aliases.erase(v_plugin_aliases.begin());
206 int generic_plugin::set_thread_id(
int in_thread_id)
208 thread_id = in_thread_id;
213 string generic_plugin::get_plugin_path()
215 return(plugin_lib_path);
219 SOCKET generic_plugin::get_socket(
void)
221 return(server_socket);
225 SOCKET generic_plugin::get_client_socket(
void)
227 return(client_socket);
231 string generic_plugin::get_plugin(
void)
237 string generic_plugin::get_plugin_name(
void)
243 string generic_plugin::get_conf_file(
void)
245 return(plugin_conf_file);
249 string generic_plugin::get_plugin_number(
void)
251 return(plugin_number);
255 int generic_plugin::get_port(
void)
261 int generic_plugin::get_thread_id(
void)
267 int generic_plugin::get_tls_flag(
void)
273 bool generic_plugin::get_validate_plugin(
void)
275 return(validate_plugin);
279 generic_plugin::generic_plugin(
void)
284 local_ip_address = NULL;
285 validate_plugin =
true;
287 plugin_conf_file =
"";
298 generic_plugin::generic_plugin(
char *plugin_name,
int plugin_port)
301 plugin_type = plugin_name;
306 local_ip_address = NULL;
307 validate_plugin =
true;
311 generic_plugin::generic_plugin(
char *plugin_name,
char *plugin_id,
int plugin_port)
314 plugin_type = plugin_name;
315 plugin_name = plugin_id;
319 local_ip_address = NULL;
320 validate_plugin =
true;
326 SOCKET ListenSocket, on;
327 struct addrinfo *result = NULL;
328 struct sockaddr_in local_address;
329 struct sockaddr_in *sa;
330 struct addrinfo hints;
335 memset(&local_address,0,
sizeof(local_address));
336 memset(&hints, 0,
sizeof(hints));
337 hints.ai_family = AF_INET;
338 hints.ai_socktype = SOCK_STREAM;
339 hints.ai_protocol = IPPROTO_TCP;
340 hints.ai_flags = AI_PASSIVE;
341 iResult = getaddrinfo(NULL, port.c_str(), &hints, &result);
346 os << fwork->get_cur_time() <<
" Thr.ID:MAIN getaddrinfo failed.";
347 fwork->
log(LOG_LOW,verbose_level,os.str());
350 ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
351 if (ListenSocket == INVALID_SOCKET)
355 os << fwork->get_cur_time() <<
" Thr.ID:MAIN socket creation failed.";
356 fwork->
log(LOG_LOW,verbose_level,os.str());
357 freeaddrinfo(result);
362 setsockopt(ListenSocket,SOL_SOCKET, SO_EXCLUSIVEADDRUSE,(
char *) &on,
sizeof (on));
364 setsockopt(ListenSocket,SOL_SOCKET, SO_REUSEADDR, (
char *)&on,
sizeof(on));
367 local_address.sin_family = AF_INET;
368 local_address.sin_addr.s_addr = inet_addr(
"127.0.0.1");
369 local_address.sin_port = htons(atoi(port.c_str()));
370 iResult = bind(ListenSocket, (sockaddr *) &local_address, (
int)result->ai_addrlen);
371 sa = (
struct sockaddr_in *) result->ai_addr;
372 local_ip_address = inet_ntoa(local_address.sin_addr);
376 iResult = bind(ListenSocket, result->ai_addr, (
int)result->ai_addrlen);
377 sa = (
struct sockaddr_in *) result->ai_addr;
378 local_ip_address = inet_ntoa(sa->sin_addr);
380 if (iResult == SOCKET_ERROR)
384 os << fwork->get_cur_time() <<
" Thr.ID:MAIN socket bind failed for port: " << port;
385 log(LOG_LOW,os.str());
386 freeaddrinfo(result);
387 shutdown(ListenSocket,2);
389 closesocket(ListenSocket);
395 iResult = listen(ListenSocket, SOMAXCONN);
396 if (iResult == SOCKET_ERROR)
400 os << fwork->get_cur_time() <<
" Thr.ID:MAIN socket listen failed for port: " << port;
401 log(LOG_LOW,os.str());
402 shutdown(ListenSocket,2);
404 closesocket(ListenSocket);
410 fwork->setblocking(ListenSocket);
411 freeaddrinfo(result);
412 return(ListenSocket);
416 string generic_plugin::generic_plugin_version()
426 if(line.size() > 11 && line.compare(0,11,
"NETWORKING=") == 0)
428 networking = atoi(line.substr(11).c_str());
431 if(line.size() > 14 && line.compare(0,14,
"VERBOSE_LEVEL=") == 0)
433 verbose_level = atoi(line.substr(14).c_str());
436 if (line.size() > 16 && line.compare(0,16,
"VALIDATE_PLUGIN=") == 0)
438 if(atoi(line.substr(16).c_str()) )
439 validate_plugin =
true;
441 validate_plugin =
false;
450 GEN_PLUGIN_MUTEX mutex;
452 mutex = CreateMutex( NULL, FALSE, NULL);
454 pthread_mutex_init(&mutex,NULL);
464 dwWaitResult = WaitForSingleObject(*mutex,INFINITE);
466 pthread_mutex_lock(mutex);
477 pthread_mutex_unlock(mutex);
483 int generic_plugin::log(
unsigned int debug_level,
string data)
487 return(fwork->
log(debug_level,verbose_level,data));
491 int generic_plugin::log(
unsigned int debug_level,
char *data)
495 return(fwork->
log(debug_level,verbose_level,(
char *) data));
virtual string bootstrap_name(void)
int log(unsigned int, unsigned int, char *)
enables logging to framework managed log file.
GEN_PLUGIN_MUTEX create_mutex(void)
Singleton class to manage framework state and provide utility functions. This class stores master Vec...
vector< string > v_plugin_aliases
This is a singleton class and provides framework functionality.
virtual bool bootstrap_init(string)
This component provides functionality that are common across plug-ins. Framework would instantiate an...
int rel_mutex(GEN_PLUGIN_MUTEX *)
This is the base class for all plugins. All plug-ins should derive from this class. This class has a bunch of virtual functions that all plug-in could/should implement. In addition to virtual functions, this class also provides a lot of utility functions for all plug-ins.
int lock_mutex(GEN_PLUGIN_MUTEX *)
SOCKET initialize_socket(string port)
Binds socket to TCP port, set options on new socket and do socket listen.
unsigned long pinstance
Pointer to 'framework' object.
virtual int get_plugin_params(string line)