Changeset f33c12f in nscp for modules/NRPEClient/NRPEClient.cpp
- Timestamp:
- 12/05/11 08:05:14 (18 months ago)
- Branches:
- master, 0.4.0, 0.4.1, 0.4.2
- Children:
- 9c06054
- Parents:
- 9853bc3
- File:
-
- 1 edited
-
modules/NRPEClient/NRPEClient.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
modules/NRPEClient/NRPEClient.cpp
r9853bc3 rf33c12f 54 54 55 55 bool NRPEClient::loadModuleEx(std::wstring alias, NSCAPI::moduleLoadMode mode) { 56 std::map<std::wstring,std::wstring> commands;57 56 58 57 std::wstring certificate; … … 187 186 } 188 187 189 NSCAPI::nagiosReturn NRPEClient::handle Command(const std::wstring &target, const std::wstring &command, std::list<std::wstring> &arguments, std::wstring &message, std::wstring &perf) {190 std::wstring cmd = client::command_line_parser::parse_command(command, _T("nrpe"));191 188 NSCAPI::nagiosReturn NRPEClient::handleRAWCommand(const wchar_t* char_command, const std::string &request, std::string &result) { 189 nscapi::functions::decoded_simple_command_data data = nscapi::functions::parse_simple_query_request(char_command, request); 190 std::wstring cmd = client::command_line_parser::parse_command(data.command, _T("syslog")); 192 191 client::configuration config; 193 192 setup(config); 194 if (cmd == _T("query")) 195 return client::command_line_parser::query(config, cmd, arguments, message, perf); 196 if (cmd == _T("submit")) { 197 boost::tuple<int,std::wstring> result = client::command_line_parser::simple_submit(config, cmd, arguments); 198 message = result.get<1>(); 199 return result.get<0>(); 200 } 201 if (cmd == _T("exec")) { 202 return client::command_line_parser::exec(config, cmd, arguments, message); 203 } 204 return commands.exec_simple(config, target, command, arguments, message, perf); 205 } 206 207 int NRPEClient::commandLineExec(const std::wstring &command, std::list<std::wstring> &arguments, std::wstring &result) { 208 std::wstring cmd = client::command_line_parser::parse_command(command, _T("nrpe")); 193 if (!client::command_line_parser::is_command(cmd)) 194 return client::command_line_parser::do_execute_command_as_query(config, cmd, data.args, result); 195 return commands.exec_simple(config, data.target, char_command, data.args, result); 196 } 197 198 NSCAPI::nagiosReturn NRPEClient::commandRAWLineExec(const wchar_t* char_command, const std::string &request, std::string &result) { 199 nscapi::functions::decoded_simple_command_data data = nscapi::functions::parse_simple_exec_request(char_command, request); 200 std::wstring cmd = client::command_line_parser::parse_command(char_command, _T("syslog")); 209 201 if (!client::command_line_parser::is_command(cmd)) 210 202 return NSCAPI::returnIgnored; 211 212 203 client::configuration config; 213 204 setup(config); 214 return client::command_line_parser::commandLineExec(config, cmd, arguments, result); 215 } 216 217 NSCAPI::nagiosReturn NRPEClient::handleRAWNotification(const wchar_t* channel, std::string request, std::string &response) { 218 try { 219 client::configuration config; 220 setup(config); 221 222 if (!client::command_line_parser::relay_submit(config, request, response)) { 223 NSC_LOG_ERROR_STD(_T("Failed to submit message...")); 224 return NSCAPI::hasFailed; 225 } 226 return NSCAPI::isSuccess; 227 } catch (std::exception &e) { 228 NSC_LOG_ERROR_STD(_T("Failed to send data: ") + utf8::to_unicode(e.what())); 229 return NSCAPI::hasFailed; 230 } catch (...) { 231 NSC_LOG_ERROR_STD(_T("Failed to send data: UNKNOWN")); 232 return NSCAPI::hasFailed; 233 } 205 return client::command_line_parser::do_execute_command_as_exec(config, cmd, data.args, result); 206 } 207 208 NSCAPI::nagiosReturn NRPEClient::handleRAWNotification(const wchar_t* channel, std::string request, std::string &result) { 209 client::configuration config; 210 setup(config); 211 return client::command_line_parser::do_relay_submit(config, request, result); 234 212 } 235 213 … … 292 270 293 271 int NRPEClient::clp_handler_impl::query(client::configuration::data_type data, ::Plugin::Common_Header* header, const std::string &request, std::string &reply) { 294 NSCAPI::nagiosReturn ret = NSCAPI::returnOK; 295 try { 296 Plugin::QueryRequestMessage request_message; 297 request_message.ParseFromString(request); 298 connection_data con = parse_header(*header); 299 300 Plugin::QueryResponseMessage response_message; 301 nscapi::functions::create_simple_header(response_message.mutable_header()); // TODO copy request header (inverted) 302 303 for (int i=0;i<request_message.payload_size();i++) { 304 std::string command = get_command(request_message.payload(i).alias(), request_message.payload(i).command()); 305 std::string data = command; 306 for (int a=0;a<request_message.payload(i).arguments_size();a++) { 307 data += "!" + request_message.payload(i).arguments(a); 308 } 309 boost::tuple<int,std::wstring> ret = instance->send(con, data); 310 std::pair<std::wstring,std::wstring> rdata = strEx::split(ret.get<1>(), _T("|")); 311 nscapi::functions::append_simple_query_response_payload(response_message.add_payload(), utf8::cvt<std::wstring>(command), ret.get<0>(), rdata.first, rdata.second); 312 } 313 response_message.SerializeToString(&reply); 314 return NSCAPI::isSuccess; 315 } catch (std::exception &e) { 316 NSC_LOG_ERROR_STD(_T("Exception: ") + utf8::to_unicode(e.what())); 317 nscapi::functions::create_simple_query_response(_T("command"), NSCAPI::returnUNKNOWN, _T("Exception: ") + utf8::to_unicode(e.what()), _T(""), reply); 318 return NSCAPI::returnUNKNOWN; 319 } 272 Plugin::QueryRequestMessage request_message; 273 request_message.ParseFromString(request); 274 connection_data con = parse_header(*header); 275 276 Plugin::QueryResponseMessage response_message; 277 nscapi::functions::make_return_header(response_message.mutable_header(), *header); 278 279 for (int i=0;i<request_message.payload_size();i++) { 280 std::string command = get_command(request_message.payload(i).alias(), request_message.payload(i).command()); 281 std::string data = command; 282 for (int a=0;a<request_message.payload(i).arguments_size();a++) { 283 data += "!" + request_message.payload(i).arguments(a); 284 } 285 boost::tuple<int,std::wstring> ret = instance->send(con, data); 286 std::pair<std::wstring,std::wstring> rdata = strEx::split(ret.get<1>(), std::wstring(_T("|"))); 287 nscapi::functions::append_simple_query_response_payload(response_message.add_payload(), utf8::cvt<std::wstring>(command), ret.get<0>(), rdata.first, rdata.second); 288 } 289 response_message.SerializeToString(&reply); 290 return NSCAPI::isSuccess; 320 291 } 321 292 322 293 int NRPEClient::clp_handler_impl::submit(client::configuration::data_type data, ::Plugin::Common_Header* header, const std::string &request, std::string &reply) { 323 std::wstring channel; 324 try { 325 Plugin::SubmitRequestMessage message; 326 message.ParseFromString(request); 327 connection_data con = parse_header(*header); 328 channel = utf8::cvt<std::wstring>(message.channel()); 329 330 for (int i=0;i<message.payload_size();++i) { 331 std::string command = get_command(message.payload(i).alias(), message.payload(i).command()); 332 std::string data = command; 333 for (int a=0;a<message.payload(i).arguments_size();a++) { 334 data += "!" + message.payload(i).arguments(i); 335 } 336 boost::tuple<int,std::wstring> ret = instance->send(con, data); 337 // TODO: Change this to append! 338 nscapi::functions::create_simple_submit_response(channel, utf8::cvt<std::wstring>(command), ret.get<0>(), _T("Message submitted successfully: ") + ret.get<1>(), reply); 339 return NSCAPI::isSuccess; 340 } 341 nscapi::functions::create_simple_submit_response(channel, _T("UNKNOWN"), NSCAPI::returnUNKNOWN, _T("Empty message was submitted"), reply); 342 return NSCAPI::isSuccess; 343 } catch (std::exception &e) { 344 NSC_LOG_ERROR_STD(_T("Exception: ") + utf8::to_unicode(e.what())); 345 nscapi::functions::create_simple_submit_response(channel, _T("UNKNOWN"), NSCAPI::returnUNKNOWN, utf8::to_unicode(e.what()), reply); 346 return NSCAPI::hasFailed; 347 } 294 Plugin::SubmitRequestMessage request_message; 295 request_message.ParseFromString(request); 296 connection_data con = parse_header(*header); 297 std::wstring channel = utf8::cvt<std::wstring>(request_message.channel()); 298 299 Plugin::SubmitResponseMessage response_message; 300 nscapi::functions::make_return_header(response_message.mutable_header(), *header); 301 302 for (int i=0;i<request_message.payload_size();++i) { 303 std::string command = get_command(request_message.payload(i).alias(), request_message.payload(i).command()); 304 std::string data = command; 305 for (int a=0;a<request_message.payload(i).arguments_size();a++) { 306 data += "!" + request_message.payload(i).arguments(i); 307 } 308 boost::tuple<int,std::wstring> ret = instance->send(con, data); 309 nscapi::functions::append_simple_submit_response_payload(response_message.add_payload(), command, ret.get<0>(), utf8::cvt<std::string>(ret.get<1>())); 310 } 311 response_message.SerializeToString(&reply); 312 return NSCAPI::isSuccess; 348 313 } 349 314 350 315 int NRPEClient::clp_handler_impl::exec(client::configuration::data_type data, ::Plugin::Common_Header* header, const std::string &request, std::string &reply) { 351 NSCAPI::nagiosReturn ret = NSCAPI::returnOK; 352 try { 353 Plugin::ExecuteRequestMessage request_message; 354 request_message.ParseFromString(request); 355 connection_data con = parse_header(*header); 356 357 for (int i=0;i<request_message.payload_size();i++) { 358 std::string command = get_command(request_message.payload(i).command()); 359 std::string data = command; 360 for (int a=0;a<request_message.payload(i).arguments_size();a++) { 361 data += "!" + request_message.payload(i).arguments(a); 362 } 363 boost::tuple<int,std::wstring> ret = instance->send(con, data); 364 nscapi::functions::create_simple_exec_response(utf8::cvt<std::wstring>(command), ret.get<0>(), ret.get<1>(), reply); 365 } 366 return NSCAPI::isSuccess; 367 } catch (std::exception &e) { 368 NSC_LOG_ERROR_STD(_T("Exception: ") + utf8::to_unicode(e.what())); 369 nscapi::functions::create_simple_exec_response(_T("command"), NSCAPI::returnUNKNOWN, _T("Exception: ") + utf8::to_unicode(e.what()), reply); 370 return NSCAPI::hasFailed; 371 } 316 Plugin::ExecuteRequestMessage request_message; 317 request_message.ParseFromString(request); 318 connection_data con = parse_header(*header); 319 320 Plugin::ExecuteResponseMessage response_message; 321 nscapi::functions::make_return_header(response_message.mutable_header(), *header); 322 323 for (int i=0;i<request_message.payload_size();i++) { 324 std::string command = get_command(request_message.payload(i).command()); 325 std::string data = command; 326 for (int a=0;a<request_message.payload(i).arguments_size();a++) 327 data += "!" + request_message.payload(i).arguments(a); 328 boost::tuple<int,std::wstring> ret = instance->send(con, data); 329 nscapi::functions::append_simple_exec_response_payload(response_message.add_payload(), command, ret.get<0>(), utf8::cvt<std::string>(ret.get<1>())); 330 } 331 response_message.SerializeToString(&reply); 332 return NSCAPI::isSuccess; 372 333 } 373 334
Note: See TracChangeset
for help on using the changeset viewer.








