Пример #1
0
PUBLIC VOID procGtpcMsg(UdpData_t *data)
{
   LOG_ENTERFN();

   UeSession      *ueSsn     = NULL;
   U8             *gtpMsgBuf = NULL;
   GtpMsgType_t   msgType    = GTPC_MSG_TYPE_INVALID;
   
   gtpMsgBuf = data->buf.pVal;
   GTP_MSG_GET_TYPE(gtpMsgBuf, msgType);

   if (GTPC_MSG_CS_REQ == msgType || GTPC_MSG_FR_REQ == msgType)
   {
      U8 *imsiBuf = getImsiBufPtr(&data->buf);

      GtpImsiKey  imsiKey;
      GTP_GET_IE_LEN(imsiBuf, imsiKey.len);
      MEMCPY(imsiKey.val, imsiBuf + GTP_IE_HDR_LEN, imsiKey.len);

      ueSsn = UeSession::getUeSession(imsiKey);
      if (NULL == ueSsn)
      {
         addPeerData(data->peerEp); 
         ueSsn = UeSession::createUeSession(imsiKey);
      }
   }
   else
   {
      GtpTeid_t teid = 0;
      GTP_MSG_DEC_TEID(gtpMsgBuf, teid);
      if (0 != teid)
      {
         ueSsn = UeSession::getUeSession(teid);
         if (NULL == ueSsn)
         {
            LOG_ERROR("GTPC Message received with unknown TEID [%d]", teid);
            delete data;
         }
         else
         {
            ueSsn->resumeTask();
         }
      }
      else
      {
         LOG_ERROR("Unhandled Incoming GTP Message");
         delete data;
      }
   }

   if (NULL != ueSsn)
   {
      if (ROK != ueSsn->run(data))
      {
         ueSsn->abort();
      }
   }

   LOG_EXITVOID();
}
Пример #2
0
/**
 * @brief
 *    Processes the keyboard input from user
 *
 * @param 
 */
VOID Keyboard::processKey
(
S32   kbInput  
)
{
   LOG_ENTERFN();

   switch(kbInput)
   {
      case 'p':
      {
         LOG_DEBUG("Pausing Traffic");
         key = KB_KEY_PAUSE_TRAFFIC;
         break;
      }
      case 'c':
      {
         LOG_DEBUG("Resuming Traffic");
         key = KB_KEY_INVALID;
         break;
      }
      case 'q':
      {
         key = KB_KEY_SIM_QUIT;
      }
      default:
      {
         LOG_DEBUG("Invalid Keyboard Input");
      }
   }

   LOG_EXITVOID();
}
Пример #3
0
VOID Keyboard::abort()
{
   LOG_ENTERFN();

   delete this;

   LOG_EXITVOID();
}
Пример #4
0
/**
 * @brief
 *    allocates a new imsi incremented by one
 *
 * @return 
 *    imsi
 */
VOID GtpImsiGenerator::allocNew(GtpImsiKey *pImsi)
{
   LOG_ENTERFN();

   numericStrIncriment(m_imsiStr, m_len); 
   pImsi->len = encodeImsi(m_imsiStr, m_len, pImsi->val);
   
   LOG_EXITVOID();
}
Пример #5
0
VOID decIeHdr(U8 *pBuf, GtpIeHdr *pHdr)
{
   LOG_ENTERFN();

   MEMSET((VOID *)pHdr, 0, sizeof(GtpIeHdr));
   GTP_DEC_IE_TYPE(pBuf, pHdr->ieType);
   GTP_DEC_IE_LEN(pBuf, pHdr->len);
   GTP_DEC_IE_INSTANCE(pBuf, pHdr->instance);

   LOG_EXITVOID();
}
Пример #6
0
PUBLIC VOID deleteCTun(GtpcTun *pTun)
{
   LOG_ENTERFN();

   pTun->m_refCount--;
   if (pTun->m_refCount == 0)
   {
      LOG_DEBUG("Deleting GTP-C Tunnel, TEID [%d]", pTun->m_locTeid);
      s_gtpcTunMap.erase(pTun->m_locTeid);
      delete pTun;
   }

   LOG_EXITVOID();
}
Пример #7
0
/**
 * @brief
 *    Handles keyboard event
 *
 * @param pSock
 */
PRIVATE VOID handleStdinSock
(
GSimSocket     *pSock
)
{
   LOG_ENTERFN();

   if (feof(stdin))
   {
      delete pSock;
   }

   S32 input = getchar();
   if (input == EOF)
   {
      LOG_EXITVOID();
   }
   else
   {
      Keyboard::getInstance()->processKey(input);
   }

   LOG_EXITVOID();
}
Пример #8
0
/**
 * @brief encodes PLMN ID into buffer based on encoding PLMN ID encoding
 *        in 23.003
 *
 * @param pPlmnId
 * @param pBuf
 *
 * @return 
 */
PUBLIC VOID gtpUtlEncPlmnId(GtpPlmnId_t *pPlmnId, U8* pBuf)
{
   LOG_ENTERFN();

   pBuf[0] = (pPlmnId->mcc[1] << 4) | pPlmnId->mcc[0];    

   if (pPlmnId->numMncDigits == 2)                                         
   {                                                              
      pBuf[1] = (0xf0 | pPlmnId->mcc[2]);                 
   }                                                              
   else                                                           
   {                                                              
      pBuf[1] = ((pPlmnId->mnc[2] << 4) | pPlmnId->mcc[2]);
   }                                                              

   pBuf[2] = ((pPlmnId->mnc[1] << 4) | pPlmnId->mnc[0]);   

   LOG_EXITVOID();
}
Пример #9
0
PUBLIC VOID numericStrIncriment(S8 *pStr, U32 len)
{
   LOG_ENTERFN();

   U32 d = 0;
   U32 carry = 1;

   for (S32 i = len - 1; i >= 0; i--)
   {
      d = GSIM_CHAR_TO_DIGIT(pStr[i]) + carry;
      if (d > 9)
      {
         pStr[i] = GSIM_DIGIT_TO_CHAR(d % 10);
         carry = 1;
      }
      else
      {
         pStr[i] = GSIM_DIGIT_TO_CHAR(d);
         carry = 0;
      }
   }

   LOG_EXITVOID();
}