Changeset 5d8cb39 in nscp


Ignore:
Timestamp:
03/21/05 22:03:51 (8 years ago)
Author:
Michael Medin <michael@…>
Children:
091d894
Parents:
55b33c1
Message:

+ Added NRPE return code

  • Fixed some return states to NSClientListener (not verified yet, but soon they wil lbe back in order :)
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/changelog

    r55b33c1 r5d8cb39  
    112005-03-21 MickeM 
    22 * Fixed BUG in inject command (now things should "work" again, but far from stable) 
     3 + Added NRPE return code 
     4 * Fixed some return states to NSClientListener (not verified yet, but soon they wil lbe back in order :) 
    35 
    462005-03-20 MickeM 
     
    810   - Most API calls have new "return codes" (typedef:ed INT to allow for return code compiler checks) 
    911   - A lot of the old return codes have changed 
    10  * Preliminary NRPE support (can parse and execute incoming requests, cant return data yet, and no encryption) 
    11  * New SimpleSocket in include/ will be used as base class for Listeners 
     12 + Preliminary NRPE support (can parse and execute incoming requests, cant return data yet, and no encryption) 
     13 + New SimpleSocket in include/ will be used as base class for Listeners 
    1214 * A lot of rewrite to the NSC API 
    1315 
    14162005-03-19 MickeM 
    1517 * Refactored out NSCLient Listener as a separate module 
    16  * Added initial NRPE listener module (not yet implemented only a shell) 
     18 + Added initial NRPE listener module (not yet implemented only a shell) 
    1719 * Changed Module API (Inject function has new syntax) 
    18  * Added some tokenizer function to charEx 
    19  * Added new wrapper function to inject Command 
     20 + Added some tokenizer function to charEx 
     21 + Added new wrapper function to inject Command 
    2022 * Minor changes in relation to refactor work 
    2123 
  • trunk/modules/NRPEListener/NRPESocket.cpp

    rc515660 r5d8cb39  
    2323}packet; 
    2424 
     25static unsigned long crc32_table[256]; 
     26 
     27/* build the crc table - must be called before calculating the crc value */ 
     28void generate_crc32_table(void){ 
     29  unsigned long crc, poly; 
     30  int i, j; 
     31 
     32  poly=0xEDB88320L; 
     33  for(i=0;i<256;i++){ 
     34    crc=i; 
     35    for(j=8;j>0;j--){ 
     36      if(crc & 1) 
     37        crc=(crc>>1)^poly; 
     38      else 
     39        crc>>=1; 
     40    } 
     41    crc32_table[i]=crc; 
     42  } 
     43 
     44  return; 
     45} 
     46 
     47/* calculates the CRC 32 value for a buffer */ 
     48unsigned long calculate_crc32(char *buffer, int buffer_size){ 
     49  register unsigned long crc; 
     50  int this_char; 
     51  int current_index; 
     52 
     53  crc=0xFFFFFFFF; 
     54 
     55  for(current_index=0;current_index<buffer_size;current_index++){ 
     56    this_char=(int)buffer[current_index]; 
     57    crc=((crc>>8) & 0x00FFFFFF) ^ crc32_table[(crc ^ this_char) & 0xFF]; 
     58  } 
     59 
     60  return (crc ^ 0xFFFFFFFF); 
     61} 
     62 
    2563void NRPESocket::onAccept(SOCKET client) { 
    2664  NSC_DEBUG_MSG("Accepting connection from remote host"); 
     
    2866  SimpleSocketListsner::readAllDataBlock block = SimpleSocketListsner::readAll(client); 
    2967  packet *p = reinterpret_cast<packet*>(block.first); 
    30   /* 
    31   char* foo = new char[1024]; 
    32   sprintf(foo, "packet_version = %d, packet_type = %d, crc32 = %d, result_code = %d", 
    33     ntohs(p->packet_version), ntohs(p->packet_type), ntohl(p->crc32_value), ntohs(p->result_code)); 
    34  
    35   NSC_DEBUG_MSG_STD("Incoming header: " + foo); 
    36   */ 
    3768  // @todo Verify versions and stuff, and ofcource add SSL (but thats in the future :) 
    3869  NSC_DEBUG_MSG_STD("Incoming data: " + p->buffer); 
     
    4071  charEx::token cmd = charEx::getToken(p->buffer, '!'); 
    4172  std::string msg, perf; 
    42   NSCModuleHelper::InjectSplitAndCommand(cmd.first.c_str(), cmd.second, '!', msg, perf); 
     73  NSCAPI::nagiosReturn ret = NSCModuleHelper::InjectSplitAndCommand(cmd.first.c_str(), cmd.second, '!', msg, perf); 
     74//QUERY_PACKET 
     75  packet p2; 
     76  strncpy(p2.buffer, (msg+"|"+perf).c_str(), 1023); 
     77  p2.buffer[1023] = 0; 
     78  p2.packet_type = htons(2); 
     79  p2.packet_version = htons(2); 
     80  p2.result_code = htons(static_cast<int>(ret)); 
     81 
     82  generate_crc32_table(); 
     83  p2.crc32_value = 0; 
     84  p2.crc32_value = htonl(calculate_crc32(reinterpret_cast<char*>(&p2),sizeof(p2))); 
     85  send(client, reinterpret_cast<char*>(&p2), sizeof(p2), 0); 
    4386 
    4487  delete [] block.first; 
  • trunk/modules/NSClientCompat/NSClientCompat.cpp

    rc515660 r5d8cb39  
    9999 #define REQ_MEMUSE     7 // Works fine! 
    100100 //#define REQ_COUNTER    8 // ! - not implemented Have to look at this, if anyone has a sample let me know... 
    101  //#define REQ_FILEAGE    9 // ! - not implemented Dont know how to use 
    102  //#define REQ_INSTANCES  10  // ! - not implemented Dont know how to use 
     101 //#define REQ_FILEAGE    9 // ! - not implemented Don't know how to use 
     102 //#define REQ_INSTANCES  10  // ! - not implemented Don't know how to use 
    103103 * 
    104104 * @param command  
     
    109109NSCAPI::nagiosReturn NSClientCompat::handleCommand(const std::string command, const unsigned int argLen, char **char_args, std::string &msg, std::string &perf) { 
    110110  std::list<std::string> stl_args; 
     111  NSClientCompat::returnBundle rb; 
    111112  int id = atoi(command.c_str()); 
    112113  if (id == 0) 
     
    143144        return NSCAPI::returnOK; 
    144145      } 
    145       /* 
    146146    case REQ_SERVICESTATE: 
    147       return NSCommands::serviceState(NSCHelper::arrayBuffer2list(argLen, args)); 
     147      rb = NSCommands::serviceState(NSCHelper::arrayBuffer2list(argLen, char_args)); 
     148      msg = rb.msg_; 
     149      perf = rb.perf_; 
     150      return rb.code_; 
     151 
    148152 
    149153    case REQ_PROCSTATE: 
    150       return NSCommands::procState(NSCHelper::arrayBuffer2list(argLen, args)); 
     154      rb = NSCommands::procState(NSCHelper::arrayBuffer2list(argLen, char_args)); 
     155      msg = rb.msg_; 
     156      perf = rb.perf_; 
     157      return rb.code_; 
    151158 
    152159    case REQ_MEMUSE: 
    153       return strEx::itos(pdhCollector->getMemCommitLimit()) + "&" +  
     160      msg = strEx::itos(pdhCollector->getMemCommitLimit()) + "&" +  
    154161        strEx::itos(pdhCollector->getMemCommit()); 
     162      return NSCAPI::returnOK; 
    155163 
    156164    case REQ_USEDDISKSPACE: 
    157       return NSCommands::usedDiskSpace(NSCHelper::arrayBuffer2list(argLen, args)); 
    158       */ 
     165      rb = NSCommands::usedDiskSpace(NSCHelper::arrayBuffer2list(argLen, char_args)); 
     166      msg = rb.msg_; 
     167      perf = rb.perf_; 
     168      return rb.code_; 
    159169  } 
    160170  return NSCAPI::returnIgnored; 
  • trunk/modules/NSClientCompat/NSClientCompat.h

    rc515660 r5d8cb39  
     1#pragma once 
    12#include "PDHCollector.h" 
    23 
     
    78  PDHCollectorThread pdhThread; 
    89  PDHCollector *pdhCollector; 
     10 
     11public: 
     12  typedef struct rB { 
     13    NSCAPI::nagiosReturn code_; 
     14    std::string msg_; 
     15    std::string perf_; 
     16    rB(NSCAPI::nagiosReturn code, std::string msg) : code_(code), msg_(msg) {} 
     17    rB() : code_(NSCAPI::returnUNKNOWN) {} 
     18  } returnBundle; 
    919 
    1020public: 
  • trunk/modules/NSClientCompat/NSCommands.cpp

    r079055f r5d8cb39  
    5959 * @todo Is this correct ? (has never been used so is most likely broken) 
    6060 */ 
    61 std::string NSCommands::procState(std::list<std::string> args) { 
     61NSClientCompat::returnBundle NSCommands::procState(std::list<std::string> args) { 
    6262  if (args.empty()) 
    63     return "ERROR: Missing argument exception."; 
     63    return NSClientCompat::returnBundle(NSCAPI::returnCRIT, "ERROR: Missing argument exception."); 
    6464  NSPROCLST procs; 
    6565  std::string ret; 
     
    7272  } catch (char *c) { 
    7373    NSC_LOG_ERROR_STD("ERROR: " + c); 
    74     return (std::string)("ERROR: ") + c; 
     74    return NSClientCompat::returnBundle(NSCAPI::returnCRIT, (std::string)"ERROR: " + c); 
    7575  } 
    7676  for (std::list<std::string>::iterator it = args.begin();it!=args.end();it++) { 
     
    9090  if (ret.empty()) 
    9191    ret ="All processes are running."; 
    92   return strEx::itos(state) + "&" + ret; 
     92  return NSClientCompat::returnBundle(state, ret); 
    9393} 
    9494 
     
    133133 * @return  
    134134 */ 
    135 std::string NSCommands::serviceState(std::list<std::string> args) { 
     135NSClientCompat::returnBundle NSCommands::serviceState(std::list<std::string> args) { 
    136136  if (args.empty()) 
    137     return "ERROR: Missing argument exception."; 
     137    return NSClientCompat::returnBundle(NSCAPI::returnCRIT, "ERROR: Missing argument exception."); 
    138138  else { 
    139139    std::string ret; 
     
    162162    if (ret.empty()) 
    163163      ret ="All services are running."; 
    164     return strEx::itos(nState) + "&" + ret; 
     164    return NSClientCompat::returnBundle(nState, ret); 
    165165  } 
    166166} 
     
    176176 * @return A string with a list of drive usage stats 
    177177 */ 
    178 std::string NSCommands::usedDiskSpace(std::list<std::string> args) { 
     178NSClientCompat::returnBundle NSCommands::usedDiskSpace(std::list<std::string> args) { 
    179179  if (args.empty()) 
    180     return "ERROR: Missing argument exception."; 
     180    return NSClientCompat::returnBundle(NSCAPI::returnCRIT, "ERROR: Missing argument exception."); 
    181181  std::string ret; 
    182182  for (std::list<std::string>::iterator it = args.begin();it!=args.end();it++) { 
     
    185185      path += ":"; 
    186186    if (GetDriveType(path.c_str()) != DRIVE_FIXED) 
    187       return "ERROR: Drive is not a fixed drive." + path; 
     187      return NSClientCompat::returnBundle(NSCAPI::returnCRIT, "ERROR: Drive is not a fixed drive." + path); 
    188188    ULARGE_INTEGER freeBytesAvailableToCaller; 
    189189    ULARGE_INTEGER totalNumberOfBytes; 
    190190    ULARGE_INTEGER totalNumberOfFreeBytes; 
    191191    if (!GetDiskFreeSpaceEx(path.c_str(), &freeBytesAvailableToCaller, &totalNumberOfBytes, &totalNumberOfFreeBytes)) 
    192       return "ERROR: Could not get freespace." + path; 
     192      return NSClientCompat::returnBundle(NSCAPI::returnCRIT, "ERROR: Could not get free space for" + path); 
    193193    ret += strEx::itos(static_cast<__int64>(totalNumberOfFreeBytes.QuadPart)) + "&"; 
    194194    ret += strEx::itos(static_cast<__int64>(totalNumberOfBytes.QuadPart)) + "&"; 
    195195  } 
    196   return ret; 
     196  return NSClientCompat::returnBundle(NSCAPI::returnUNKNOWN, ret); 
    197197} 
  • trunk/modules/NSClientCompat/NSCommands.h

    re0705d4 r5d8cb39  
    22 
    33#include <EnumNtSrv.h> 
    4  
     4#include "NSClientCompat.h" 
    55 
    66 
     
    88  typedef enum ServiceState { ok = 0, unknown = 1, error = 2 } ServiceState; 
    99  std::string cmdServiceStateCheckItem(bool bShowAll, int &nState, TNtServiceInfo &info); 
    10   std::string serviceState(std::list<std::string> args); 
    11   std::string usedDiskSpace(std::list<std::string> args); 
    12   std::string procState(std::list<std::string> args); 
    13 } 
     10  NSClientCompat::returnBundle serviceState(std::list<std::string> args); 
     11  NSClientCompat::returnBundle usedDiskSpace(std::list<std::string> args); 
     12  NSClientCompat::returnBundle procState(std::list<std::string> args); 
     13}; 
  • trunk/modules/NSClientListener/NSClientSocket.cpp

    r55b33c1 r5d8cb39  
    8585  std::string message, perf; 
    8686  NSCAPI::nagiosReturn ret = NSCModuleHelper::InjectSplitAndCommand(cmd.first.c_str(), cmd.second, '&', message, perf); 
    87   return NSCHelper::translateReturn(ret) + "&" + message + "|" + perf; 
     87  int c = atoi(cmd.first.c_str()); 
     88  switch (c) { 
     89    case REQ_CLIENTVERSION: 
     90    case REQ_UPTIME: 
     91    case REQ_CPULOAD: 
     92    case REQ_USEDDISKSPACE: 
     93      return message; 
     94    case REQ_SERVICESTATE: 
     95    case REQ_PROCSTATE: 
     96      return NSCHelper::translateReturn(ret) + "&" + message; 
     97    default: 
     98      return NSCHelper::translateReturn(ret) + "&" + message + "|" + perf; 
     99  } 
    88100} 
    89101 
  • trunk/modules/NSClientListener/NSClientSocket.h

    r4f2e807 r5d8cb39  
    5555#define DEFAULT_TCP_PORT 12489 
    5656 
     57#define REQ_CLIENTVERSION 1 // Works fine! 
     58#define REQ_CPULOAD     2 // Quirks 
     59#define REQ_UPTIME      3 // Works fine! 
     60#define REQ_USEDDISKSPACE 4 // Works fine! 
     61#define REQ_SERVICESTATE  5 // Works fine! 
     62#define REQ_PROCSTATE   6 // Works fine! 
     63#define REQ_MEMUSE      7 // Works fine! 
     64//#define REQ_COUNTER   8 // ! - not implemented Have to look at this, if anyone has a sample let me know... 
     65//#define REQ_FILEAGE   9 // ! - not implemented Dont know how to use 
     66//#define REQ_INSTANCES 10  // ! - not implemented Dont know how to use 
    5767 
    5868 
Note: See TracChangeset for help on using the changeset viewer.