Пример #1
0
const WCHAR *TimeHelper::GetCurrentStrTime2()
{
	static WCHAR strTime[64] = {0};
	memset(strTime, 0, sizeof(strTime));

	SYSTEMTIME time;	
	GetLocalTime(&time);

	const WCHAR * strTimeTmp = GetStrTime2(time);
	wcsncpy_s(strTime, PARRAYSIZE(strTime), strTimeTmp, PARRAYSIZE(strTime)-1);

	return strTime;
}
Пример #2
0
int TimeHelper::GetWeekDayValue(const E_WeekDay&eWeekDay)
{
	struct ST_WeekDayAndValue
	{
		E_WeekDay m_eWeekDay;
		int m_iWeekDayValue;
	};

	struct ST_WeekDayAndValue st_aWeekDayAndValue[] = 
	{
		{e_Monday,		1},
		{e_Tuesday,		2},
		{e_Wednesday,	3},
		{e_Thursday,	4},
		{e_Friday,		5},
		{e_Saturday,	6},
		{e_Sunday,		7},
	};

	int iWeekDayAndValueArraySize = PARRAYSIZE(st_aWeekDayAndValue);

	int iWeekDayValue = 1;

	for (int i = 0; i < iWeekDayAndValueArraySize; i++)
	{
		struct ST_WeekDayAndValue &st_WeekDayAndValue = st_aWeekDayAndValue[i];
		if (eWeekDay == st_WeekDayAndValue.m_eWeekDay)
		{
			iWeekDayValue = st_WeekDayAndValue.m_iWeekDayValue;
			break;
		}
	}

	return iWeekDayValue;
}
Пример #3
0
OpalRTPSession::SendReceiveStatus OpalDTLSSRTPSession::ExecuteHandshake(Channel channel)
{
  {
    PWaitAndSignal mutex(m_dataMutex);

    if (m_remotePort[channel] == 0)
      return e_IgnorePacket; // Too early

    if (m_sslChannel[channel] == NULL)
      return e_ProcessPacket; // Too late (done)
  }

  SSLChannel & sslChannel = *m_sslChannel[channel];
  if (!sslChannel.ExecuteHandshake())
    return e_AbortTransport;

  const OpalMediaCryptoSuite* cryptoSuite = NULL;
  srtp_profile_t profile = srtp_profile_reserved;
  for (PINDEX i = 0; i < PARRAYSIZE(ProfileNames); ++i) {
    if (sslChannel.GetSelectedProfile() == ProfileNames[i].m_dtlsName) {
      profile = ProfileNames[i].m_profile;
      cryptoSuite = OpalMediaCryptoSuiteFactory::CreateInstance(ProfileNames[i].m_opalName);
      break;
    }
  }

  if (profile == srtp_profile_reserved || cryptoSuite == NULL) {
    PTRACE(2, "Error in SRTP profile.");
    return e_AbortTransport;
  }

  PINDEX masterKeyLength = srtp_profile_get_master_key_length(profile);
  PINDEX masterSaltLength = srtp_profile_get_master_salt_length(profile);

  PBYTEArray keyMaterial = sslChannel.GetKeyMaterial(((masterSaltLength + masterKeyLength) << 1), "EXTRACTOR-dtls_srtp");
  if (keyMaterial.IsEmpty())
    return e_AbortTransport;

  OpalSRTPKeyInfo * keyInfo = dynamic_cast<OpalSRTPKeyInfo*>(cryptoSuite->CreateKeyInfo());
  PAssertNULL(keyInfo);

  keyInfo->SetCipherKey(PBYTEArray(keyMaterial, masterKeyLength));
  keyInfo->SetAuthSalt(PBYTEArray(keyMaterial + masterKeyLength*2, masterSaltLength));
  ApplyKeyToSRTP(*keyInfo, sslChannel.IsServer() ? e_Receiver : e_Sender);

  keyInfo->SetCipherKey(PBYTEArray(keyMaterial + masterKeyLength, masterKeyLength));
  keyInfo->SetAuthSalt(PBYTEArray(keyMaterial + masterKeyLength*2 + masterSaltLength, masterSaltLength));
  ApplyKeyToSRTP(*keyInfo, sslChannel.IsServer() ? e_Sender : e_Receiver);

  delete keyInfo;

  m_queueChannel[channel].Close();
  sslChannel.Detach(PChannel::ShutdownWrite); // Do not close the socket!
  delete m_sslChannel[channel];
  m_sslChannel[channel] = NULL;
  return e_ProcessPacket;
}
Пример #4
0
    DTLSContext()
      : PSSLContext(PSSLContext::DTLSv1)
    {
      PStringStream dn;
      dn << "/O=" << PProcess::Current().GetManufacturer()
        << "/CN=*";

      PSSLPrivateKey pk(1024);
      if (!m_cert.CreateRoot(dn, pk))
      {
        PTRACE(1, "Could not create certificate for DTLS.");
        return;
      }

      if (!UseCertificate(m_cert))
      {
        PTRACE(1, "Could not use DTLS certificate.");
        return;
      }

      if (!UsePrivateKey(pk))
      {
        PTRACE(1, "Could not use private key for DTLS.");
        return;
      }

      PStringStream ext;
      for (PINDEX i = 0; i < PARRAYSIZE(ProfileNames); ++i) {
        const OpalMediaCryptoSuite* cryptoSuite = OpalMediaCryptoSuiteFactory::CreateInstance(ProfileNames[i].m_opalName);
        if (cryptoSuite)
        {
          if (!ext.IsEmpty())
            ext << ':';
          ext << ProfileNames[i].m_dtlsName;
        }
      }
      if (!SetExtension(ext))
      {
        PTRACE(1, "Could not set TLS extension for SSL context.");
        return;
      }
    }