Advertisement
Guest User

Untitled

a guest
Aug 16th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.54 KB | None | 0 0
  1.  
  2. void SV_ParseVoiceData_emu(IGameClient *cl)
  3. {
  4.     sizebuf_t buff;
  5.     int start = *g_RehldsFuncs->GetMsgReadCount();
  6.     auto netmsg = g_RehldsFuncs->GetNetMessage();
  7.     char chReceived[4096];
  8.     short nDataLength = g_RehldsFuncs->MSG_ReadShort();
  9.  
  10.     if (nDataLength > sizeof(chReceived)) {
  11.         g_RehldsFuncs->DropClient(cl, FALSE, "Invalid voice data\n");
  12.         return;
  13.     }
  14.  
  15.     int point = *g_RehldsFuncs->GetMsgReadCount();
  16.     g_RehldsFuncs->MSG_ReadBuf(nDataLength, chReceived);
  17.  
  18.  
  19.     if (g_pcv_sv_voiceenable->value == 0.0f) {
  20.         return;
  21.     }
  22.  
  23.     CRevoicePlayer *srcPlayer = GetPlayerByClientPtr(cl);
  24.     srcPlayer->SetLastVoiceTime(g_RehldsSv->GetTime());
  25.     srcPlayer->IncreaseVoiceRate(nDataLength);
  26.  
  27.     static char sameBuff[4096];
  28.     static byte temp[4096];
  29.     short sameBuffLen = 0;
  30.  
  31.     switch (srcPlayer->GetCodecType())
  32.     {
  33.     case vct_silk:
  34.     {
  35.         if (nDataLength > MAX_SILK_DATA_LEN || srcPlayer->GetVoiceRate() > MAX_SILK_VOICE_RATE)
  36.             return;
  37.  
  38.         sameBuffLen = TranscodeVoice(srcPlayer, chReceived, nDataLength, srcPlayer->GetSilkCodec(), srcPlayer->GetSilkCodec(), sameBuff, sizeof(sameBuff));
  39.         break;
  40.     }
  41.     case vct_opus:
  42.     {
  43.         if (nDataLength > MAX_OPUS_DATA_LEN || srcPlayer->GetVoiceRate() > MAX_OPUS_VOICE_RATE)
  44.             return;
  45.  
  46.         sameBuffLen = TranscodeVoice(srcPlayer, chReceived, nDataLength, srcPlayer->GetOpusCodec(), srcPlayer->GetOpusCodec(), sameBuff, sizeof(sameBuff));
  47.         break;
  48.     }
  49.     case vct_speex:
  50.     {
  51.         if (nDataLength > MAX_SPEEX_DATA_LEN || srcPlayer->GetVoiceRate() > MAX_SPEEX_VOICE_RATE)
  52.             return;
  53.  
  54.         sameBuffLen = TranscodeVoice(srcPlayer, chReceived, nDataLength, srcPlayer->GetSpeexCodec(), srcPlayer->GetSpeexCodec(), sameBuff, sizeof(sameBuff));
  55.         break;
  56.     }
  57.     default:
  58.         return;
  59.     }
  60.     //UTIL_ServerPrintf("%d %d\n", nDataLength, sameBuffLen);
  61.     if (sameBuffLen)
  62.     {
  63.         if (nDataLength >= sameBuffLen)
  64.         {
  65.             memcpy(&netmsg->data[start], &sameBuffLen, 2);
  66.             memcpy(&netmsg->data[point], sameBuff, sameBuffLen);
  67.             if (nDataLength != sameBuffLen)
  68.             {
  69.                 std::vector<unsigned char> myvector(nDataLength - sameBuffLen);
  70.                 std::fill(myvector.begin(), myvector.end(), 1);
  71.                 memcpy(&netmsg->data[point + sameBuffLen], myvector.data(), myvector.size());
  72.             }
  73.         }
  74.         else
  75.         {
  76.             //    start         point        end
  77.             //.....|............|............|
  78.             int len = netmsg->cursize - (point + nDataLength);
  79.             if (len)
  80.             {
  81.                 memcpy(temp, &netmsg->data[point + nDataLength], len);
  82.                 memcpy(&netmsg->data[start], &sameBuffLen, 2);
  83.                 memcpy(&netmsg->data[point], sameBuff, sameBuffLen);
  84.                 memcpy(&netmsg->data[point + sameBuffLen], temp, len - (sameBuffLen - nDataLength));
  85.                 g_RehldsFuncs->MSG_WriteBuf(netmsg, (sameBuffLen - nDataLength), &temp[len - (sameBuffLen - nDataLength)]);
  86.             }
  87.             else
  88.             {
  89.                 memcpy(&netmsg->data[start], &sameBuffLen, 2);                
  90.                 memcpy(&netmsg->data[point], sameBuff, sameBuffLen-(sameBuffLen- nDataLength));
  91.                 g_RehldsFuncs->MSG_WriteBuf(netmsg, (sameBuffLen - nDataLength), &sameBuff[sameBuffLen - (sameBuffLen - nDataLength)]);
  92.             }
  93.         }
  94.     }
  95.     *g_RehldsFuncs->GetMsgReadCount() = start;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement