Ejemplo n.º 1
0
bool CmdBrowser(char *szBrowser, bool bWait)
{
   m_szBrowser = strmk(szBrowser);
   m_bBrowserWait = bWait;

   return true;
}
Ejemplo n.º 2
0
// UserGet: Find a given user
// iUserID -         ID of the user to search for
// iSearchType -     Flag for which search (0 = use szUserName, 1 = use iUserID)
// bReset -          Flag for temporary position setting
bool UserGet(EDF *pData, int *iUserID, char **szUserName, int iSearchType, bool bReset, long lDate)
{
	STACKTRACE
   int iUserEDF = -1;
   long lDateEDF = 0;
   char *szUserEDF = NULL;
   bool bLoop = true, bFound = false, bGetCopy = false;

   if((iSearchType == 0 && (szUserName == NULL || *szUserName == NULL)) ||
      (iSearchType == 1 && (iUserID == NULL || *iUserID <= 0)))
   {
      return false;
   }
   
   bGetCopy = pData->GetCopy(false);
   if(bReset == true)
   {
		// Mark position for reset
       pData->TempMark();
   }

   /* if(lDate != -1)
   {
      debug("UserGet userid %d (date %ld)\n", *iUserID, lDate);
   } */

   // Move to first user
   pData->Root();
   pData->Child("users");
   bLoop = pData->Child("user");
   while(bFound == false && bLoop == true)
   {
      if(lDate != -1 || pData->GetChildBool("deleted") == false)
      {
         if(iSearchType == 0)
         {
            // Search by name
            pData->GetChild("name", &szUserEDF);
            if(stricmp(*szUserName, szUserEDF) == 0)
            {
               // Set user ID return
               pData->Get(NULL, iUserID);
               strcpy(*szUserName, szUserEDF);
               bFound = true;
            }
         }
         else
         {
            // Search by ID
            pData->Get(NULL, &iUserEDF);
            if(*iUserID == iUserEDF)
            {
               if(szUserName != NULL)
               {
                  // Set user name return
                  /* if(lDate != -1)
                  {
                     EDFPrint("UserGet historical pre check", pData, false);
                  } */

                  pData->Child("name", EDFElement::LAST);
                  pData->Get(NULL, &szUserEDF);
                  if(lDate != -1)
                  {
                     // Check historical names
                     // printf("UserGet current name %s\n", szUserEDF);

                     bLoop = pData->Prev("name");
                     while(bLoop == true)
                     {
                        lDateEDF = time(NULL);
                        pData->GetChild("date", &lDateEDF);
                        printf("UserGet historical check %ld", lDateEDF);
                        if(lDateEDF >= lDate)
                        {
                           pData->Get(NULL, &szUserEDF);
                           printf(". match %s", szUserEDF);

                           bLoop = pData->Prev("name");
                        }
                        else
                        {
                           bLoop = false;
                        }
                        printf("\n");
                     }

                     // printf("UserGet historical name %s\n", szUserEDF);

                     // EDFPrint("UserGet historial name post check", pData, false);
                  }
                  pData->Parent();

                  /* if(lDate != -1)
                  {
                     EDFPrint("UserGet historial name post check", pData, false);
                  } */

                  *szUserName = strmk(szUserEDF);
               }
               bFound = true;
            }
         }
      }
      if(bFound == false)
      {
         // Move to next child
         bLoop = pData->Next("user");
      }
   }

   if(bReset == true)
   {
		// Reset to marked position
      pData->TempUnmark();
   }

   pData->GetCopy(bGetCopy);

   return bFound;
}
Ejemplo n.º 3
0
char *CmdText(int iOptions, const char *szInit, CMDFIELDSFUNC pFieldsFunc, EDF *pData)
{
   STACKTRACE
   char *szInput = NULL, *szTempFile = NULL;
   int iFile = 0;
   CmdInput *pInput = NULL;
   int iFork = 0, iReturn = -1;
   struct stat sFile;

   if(CmdEditor() != NULL && mask(iOptions, CMD_LINE_EDITOR) == true)
   {
      /* szTempFile = tempnam("/tmp", "qUAck");
      // debug("CmdText temp file %s\n", szTempFile);
      fFile = fopen(szTempFile, "w");
      if(fFile != NULL) */

      szTempFile = strmk("qUAckXXXXXXXX");
      iFile = mkstemp(szTempFile);
      if(iFile > 0)
      {
         // fclose(fFile);

         debug(DEBUGLEVEL_INFO, "CmdText temp file %s\n", szTempFile);

         iFork = fork();
         if(iFork > 0)
         {
            STACKTRACEUPDATE
            iReturn = wait(NULL);
            debug(DEBUGLEVEL_DEBUG, "CmdText wait return %d\n", iReturn);

            CmdRedraw(true);
         }
         else if(iFork == 0)
         {
            iReturn = execl(CmdEditor(), CmdEditor(), szTempFile, NULL);
            if(iReturn == -1)
            {
               debug(DEBUGLEVEL_ERR, "CmdText exec failed, %s\n", strerror(errno));
            }
         }
         else
         {
            debug(DEBUGLEVEL_ERR, "CmdText fork error, %s\n", strerror(errno));
         }
      }
      else
      {
         debug(DEBUGLEVEL_ERR, "CmdText mkstemp failed, %s\n", strerror(errno));
      }
      STACKTRACEUPDATE
      if(iReturn != -1)
      {
         if(CmdYesNo("Send message", true) == true)
         {
            fstat(iFile, &sFile);

            szInput = new char[sFile.st_size + 1];
            lseek(iFile, 0, SEEK_SET);
            read(iFile, szInput, sFile.st_size);
            szInput[sFile.st_size] = '\0';
            debug(DEBUGLEVEL_DEBUG, "CmdText temp file '%s'\n", szInput);
         }
      }

      if(iFile > 0)
      {
         close(iFile);
      }
   }
Ejemplo n.º 4
0
void CmdStartup(int iSignal)
{
   bool bLoop = true, bEnvUser = false;
   int cRead = 0, cCMD = 0, cOPT = 0, iEnvPos = 0, iEnvLen = 0;
   unsigned char szEnv[50];

   debug(DEBUGLEVEL_INFO, "CmdStartup entry %d\n", iSignal);

   printf("%c%c%c%c%c%c%c%c%c", IAC, WILL, TELOPT_ECHO, IAC, WILL, TELOPT_SGA, IAC, DO, TELOPT_NEW_ENVIRON);
   fflush(stdout);

   while(bLoop == true)
   {
      cRead = CmdInputGet();
      debug(DEBUGLEVEL_DEBUG, "CmdStartup read %d, length %d\n", cRead, CmdInputLen());

      if(cRead == IAC && CmdInputLen() >= 2)
      {
         debug(DEBUGLEVEL_DEBUG, "CmdStartup IAC (%d more chars)", CmdInputLen(), cRead);
         cCMD = CmdInputGet();
         cOPT = CmdInputGet();
         debug(DEBUGLEVEL_DEBUG, " [%d][%d]\n", cCMD, cOPT);

         if(cCMD == WILL && cOPT == TELOPT_NEW_ENVIRON)
         {
            iEnvLen = 0;

            szEnv[iEnvLen++] = IAC;
            szEnv[iEnvLen++] = SB;
            szEnv[iEnvLen++] = TELOPT_NEW_ENVIRON;
            szEnv[iEnvLen++] = TELQUAL_SEND;

            iEnvLen = CmdStartupEnv(szEnv, iEnvLen, NEW_ENV_VAR, "USER");
            iEnvLen = CmdStartupEnv(szEnv, iEnvLen, ENV_USERVAR, "TERM");
            // iEnvLen = CmdStartupEnv(szEnv, iEnvLen, ENV_USERVAR, "COLUMNS");
            // iEnvLen = CmdStartupEnv(szEnv, iEnvLen, ENV_USERVAR, "LINES");

            szEnv[iEnvLen++] = IAC;
            szEnv[iEnvLen++] = SE;

            debug(DEBUGLEVEL_DEBUG, "CmdStartup env request: ");
            for(iEnvPos = 0; iEnvPos < iEnvLen; iEnvPos++)
            {
               if(isalnum(szEnv[iEnvPos]))
               {
                  debug(DEBUGLEVEL_DEBUG, "%c", szEnv[iEnvPos]);
               }
               else
               {
                  debug(DEBUGLEVEL_DEBUG, "[%d]", szEnv[iEnvPos]);
               }
            }
            debug(DEBUGLEVEL_DEBUG, "\n");

            fwrite(szEnv, sizeof(char), iEnvLen, stdout);
            fflush(stdout);

            // sleep(2);
         }
         else if(cCMD == SB && cOPT == TELOPT_NEW_ENVIRON)
         {
            debug(DEBUGLEVEL_DEBUG, "CmdStartup env settings\n");

            cRead = CmdInputGet();
            if(cRead == TELQUAL_IS)
            {
               iEnvPos = 0;
               do
               {
                  cRead = CmdInputGet();
                  if(cRead == IAC || cRead == NEW_ENV_VAR || cRead == ENV_USERVAR)
                  {
                     if(iEnvPos > 0)
                     {
                        szEnv[iEnvPos] = '\0';
                        debug(DEBUGLEVEL_DEBUG, ", value '%s'\n", szEnv);

                        if(bEnvUser == true)
                        {
                           g_szEnvUser = strmk((char *)szEnv);
                           bEnvUser = false;
                        }
                     }

                     // debug("CmdStartup env setting reset\n");
                     iEnvPos = 0;
                  }
                  else if(cRead == NEW_ENV_VALUE)
                  {
                     if(iEnvPos > 0)
                     {
                        szEnv[iEnvPos] = '\0';
                        debug(DEBUGLEVEL_DEBUG, "CmdStartup env '%s'", szEnv);

                        if(stricmp((char *)szEnv, "USER") == 0)
                        {
                           bEnvUser = true;
                        }
                     }

                     iEnvPos = 0;
                  }
                  else if(cRead == IAC)
                  {
                     cRead = CmdInputGet();
                     if(cRead == SE)
                     {
                     }
                  }
                  else
                  {
                     szEnv[iEnvPos++] = cRead;
                  }
               } while(cRead != SE && CmdInputLen() > 0);
            }
         }
      }
      else
      {
         bLoop = false;
      }
   }

   debug(DEBUGLEVEL_DEBUG, "CmdStartup %d chars in buffer\n", CmdInputLen());

   CmdWidth(80);
   CmdHeight(25);

   m_bStartup = false;

   debug(DEBUGLEVEL_INFO, "CmdStartup exit\n");
}
Ejemplo n.º 5
0
// Internal channel get method
bool ChannelGet(EDF *pData, int *iChannelID, char **szChannelName, int iSearchType, bool bReset)
{
	STACKTRACE
   int iChannelEDF = -1;
   char *szChannelEDF = NULL;
   bool bLoop = true, bFound = false, bGetCopy = false;

	if((iSearchType == 0 && (szChannelName == NULL || *szChannelName == NULL)) ||
	   (iSearchType == 1 && (iChannelID == NULL || *iChannelID <= 0)))
	{
		return false;
	}

   bGetCopy = pData->GetCopy(false);
   if(bReset == true)
	{
       pData->TempMark();
	}
	
   // Position to first channel
   pData->Root();
   pData->Child("channels");
   bLoop = pData->Child("channel");
   while(bFound == false && bLoop == true)
   {
      if(iSearchType == 0)
      {
         // Search by name
         pData->GetChild("name", &szChannelEDF);
         if(stricmp(*szChannelName, szChannelEDF) == 0)
         {
            // Set channel ID return (make a copy of the name)
            pData->Get(NULL, iChannelID);
            strcpy(*szChannelName, szChannelEDF);
            bFound = true;
         }
      }
      else
      {
         // Search by ID
         pData->Get(NULL, &iChannelEDF);
         if(*iChannelID == iChannelEDF)
         {
            if(szChannelName != NULL)
            {
               // Set channel name return (use a copy)
               pData->GetChild("name", &szChannelEDF);
               *szChannelName = strmk(szChannelEDF);
            }
            bFound = true;
         }
      }
      if(bFound == false)
      {
         bLoop = pData->Iterate("channel", "channels");
      }
   }
   
   if(bReset == true)
   {
      pData->TempUnmark();
   }

   pData->GetCopy(bGetCopy);

   return bFound;
}
Ejemplo n.º 6
0
EDF *QueryToEDF(char *szQuery)
{
   int iValue = 0;
   bool bLiteral = false, bNot = false;
   char cQuote = '\0';
   char *szPos = szQuery, *szStart = NULL, *szToken = NULL, *szChr = NULL, *szCommand = NULL, *szValue = NULL, *szName = NULL;
   EDF *pEDF = NULL, *pReturn = NULL;
   EDFElement *pElement = NULL, *pDelete = NULL;

   printf("QueryToEDF entry '%s'\n", szQuery);

   pEDF = new EDF();
   pEDF->Set("and");

   while(*szPos != '\0' && (*szPos == ' ' || *szPos == '\t' || *szPos == '\n'))
   {
      szPos++;
   }

   while(*szPos != '\0')
   {
      printf("QueryToEDF loop %d %c\n", szPos - szQuery, *szPos);

      if(*szPos == '(')
      {
         printf("QueryToEDF open bracket\n");

         if(bNot == true)
         {
            pEDF->Add("not");
            bNot = false;
         }

         pEDF->Add("and");

         szPos++;
      }
      else if(*szPos == ')')
      {
         EDFParser::Print("QueryToEDF close bracket", pEDF, EDFElement::EL_CURR | EDFElement::PR_SPACE);

         if(pEDF->Children() == 0)
         {
            pEDF->Delete();
         }
         else if(pEDF->Children() == 1)
         {
            EDFParser::Print("QueryToEDF pre delete", pEDF, EDFElement::EL_CURR | EDFElement::PR_SPACE);

            pEDF->Child();
            pElement = pEDF->GetCurr();
            pEDF->Parent();
            pDelete = pEDF->GetCurr();
            pEDF->Parent();
            pEDF->MoveFrom(pElement);
            pEDF->SetCurr(pDelete);
            pEDF->Delete();

            EDFParser::Print("QueryToEDF post delete", pEDF, EDFElement::EL_CURR | EDFElement::PR_SPACE);
         }
         else
         {
            pEDF->Parent();
         }

         pEDF->Get(&szName);
         if(strcmp(szName, "not") == 0)
         {
            pEDF->Parent();
         }
         delete[] szName;

         szPos++;
      }
      else
      {
         if(*szPos == '"' || *szPos == '\'')
         {
            cQuote = *szPos;
            szPos++;
         }
         else
         {
            cQuote = '\0';
         }

         szStart = szPos;
         if(cQuote != '\0')
         {
            bLiteral = false;

            // while(*szPos != '\0' && !(bLiteral == false && *szPos == cQuote));
            while(*szPos != '\0' && *szPos != cQuote)
            {
               /* if(*szPos == '\\')
               {
                  bLiteral = true;
               }
               else
               {
                  bLiteral = false;
               } */

               szPos++;
            }
         }
         else
         {
            while(*szPos != '\0' && isspace(*szPos) == 0 && *szPos != '(' && *szPos != ')')
            {
               szPos++;
            }
         }

         szToken = strmk(szQuery, szStart - szQuery, szPos - szQuery);
         // printf("%-*sQueryToEDF token '%s'\n", iIndent, "", szToken);

         if(cQuote != '\0')
         {
            szPos++;
         }

         szChr = strchr(szToken, ':');
         if(szChr != NULL)
         {
            szCommand = strmk(szToken, 0, szChr - szToken);
            szValue = strmk(szChr + 1);
            iValue = atoi(szValue);
            printf("QueryToEDF command %s: '%s' / %d\n", szCommand, szValue, iValue);

            if(bNot == true)
            {
               pEDF->Add("not");
            }

            if(stricmp(szCommand, "folder") == 0 || stricmp(szCommand, "folderid") == 0)
            {
               pEDF->AddChild("folderid", iValue);
            }
            else if(stricmp(szCommand, "from") == 0 || stricmp(szCommand, "fromid") == 0)
            {
               pEDF->AddChild("fromid", iValue);
            }
            else if(stricmp(szCommand, "to") == 0 || stricmp(szCommand, "toid") == 0)
            {
               pEDF->AddChild("toid", iValue);
            }
            else if(stricmp(szCommand, "user") == 0 || stricmp(szCommand, "userid") == 0)
            {
               pEDF->Add("or");
               pEDF->AddChild("fromid", iValue);
               pEDF->AddChild("toid", iValue);
               pEDF->Parent();
            }

            if(bNot == true)
            {
               pEDF->Parent();

               bNot = false;
            }

            delete[] szCommand;
            delete[] szValue;
         }
         else
         {
            if(stricmp(szToken, "and") == 0 || stricmp(szToken, "or") == 0)
            {
               printf("QueryToEDF logical %s\n", szToken);

               pEDF->Set(szToken);
            }
            else if(stricmp(szToken, "not") == 0)
            {
               bNot = true;
            }
            else
            {
               printf("QueryToEDF keyword '%s'\n", szToken);
               pEDF->AddChild("keyword", szToken);
            }
         }

         delete[] szToken;
      }

      if(isspace(*szPos) != 0)
      {
         do
         {
            szPos++;
         }
         while(*szPos != '\0' && isspace(*szPos) != 0);
      }
   }

   pReturn = new EDF();

   pReturn->Copy(pEDF);

   delete pEDF;

   EDFParser::Print("QueryToEDF exit", pReturn);
   return pReturn;
}