int CSocket::sendmessage(char *ip, int port, CBuffer *source) { if(sockid<0)return -1; int size = 0; sockaddr_in addr; if(udp) { size = std::min(source->count, 8195); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = inet_addr(ip); size = sendto(sockid, source->data, size, 0, (sockaddr *)&addr, sizeof(sockaddr_in)); } else { CBuffer sendbuff; sendbuff.clear(); if(format == 0) { sendbuff.writeushort(source->count); sendbuff.addBuffer(source); size = send(sockid, sendbuff.data, sendbuff.count, 0); }else if(format == 1) { sendbuff.addBuffer(source); sendbuff.writechars(formatstr); size = send(sockid, sendbuff.data, sendbuff.count, 0); }else if(format == 2) size = send(sockid, source->data, source->count, 0); } if(size == SOCKET_ERROR)return SOCKET_ERROR; return size; }
int CSocket::sendmessage( const char *ip, int port, CBuffer *source ) { if (sockid<0) return -1; int size = 0; SOCKADDR_IN addr; if(udp) { size = min(source->count, 8195); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = inet_addr(ip); size = sendto(sockid, source->data, size, 0, (SOCKADDR *)&addr, sizeof(SOCKADDR_IN)); } else { CBuffer sendbuff; sendbuff.clear(); if(format == 0) { sendbuff.writeushort(source->count); sendbuff.addBuffer(source); size = send(sockid, sendbuff.data, sendbuff.count, 0); } else if(format == 1) { sendbuff.addBuffer(source); sendbuff.writechars(formatstr); size = send(sockid, sendbuff.data, sendbuff.count, 0); } else if(format == 2) size = send(sockid, source->data, source->count, 0); } return ((size = SOCKET_ERROR) ? -WSAGetLastError() : size); }
bool ZLibUtils::Uncompress(CBuffer& pSrc) { QMutexLocker l(&ZLibUtils::m_oMutex); for(ulong nSize = qMax(pSrc.size() * 6u, 1024u); ; nSize *= 2) { ZLibUtils::m_oCompressBuffer.resize(nSize); ulong nCompress = ZLibUtils::m_oCompressBuffer.size(); int nRet = ::uncompress((Bytef*)ZLibUtils::m_oCompressBuffer.data(), &nCompress, (Bytef*)pSrc.data(), pSrc.size()); if(nRet == Z_OK) { ZLibUtils::m_oCompressBuffer.resize(nCompress); pSrc.clear(); pSrc.append(ZLibUtils::m_oCompressBuffer); break; } if(nRet != Z_BUF_ERROR) { return false; } } return true; }
bool ZLibUtils::Compress(CBuffer& pSrc, bool bIfSmaller) { QMutexLocker l(&ZLibUtils::m_oMutex); if(bIfSmaller && pSrc.size() < 64) { return false; } ulong nCompress = qMax(ZLibUtils::m_oCompressBuffer.size(), pSrc.size() * 2); ZLibUtils::m_oCompressBuffer.resize(nCompress); int nRet = ::compress((Bytef*)ZLibUtils::m_oCompressBuffer.data(), &nCompress, (const Bytef*)pSrc.data(), pSrc.size()); if(nRet != Z_OK) { Q_ASSERT(nRet != Z_BUF_ERROR); return false; } ZLibUtils::m_oCompressBuffer.resize(nCompress); if(bIfSmaller && ZLibUtils::m_oCompressBuffer.size() > pSrc.size()) { return false; } pSrc.clear(); pSrc.append(ZLibUtils::m_oCompressBuffer); return true; }
void CLoaderTGeometry::updateModel(IModel * model, const std::map<int, TTextureId>& textures) const { if (model == nullptr) return; CBuffer * buffer = model->getBuffer(); if (buffer == nullptr) return; buffer->clear(); const std::size_t numFaces = m_textures.size(); std::vector<unsigned int>& indices = buffer->getIndices(); indices = m_indices; std::vector<TVector3F>& vertices = buffer->getVertices(); vertices = m_vertices; std::vector<TVector2F>& text_coords = buffer->getTextCoords(); text_coords = m_coords; TBufferTextureVector& text = buffer->getTextures(); text.clear(); text.reserve(numFaces); for (std::size_t i = 0; i < numFaces; ++i) { TBufferTexture t; t.nbr = 3; std::map<int, TTextureId>::const_iterator it = textures.find(m_textures[i]); if (it == textures.end()) { t.texture[0] = CTextureManager::DefaultTexture; } else { t.texture[0] = it->second; } text.push_back(t); } buffer->update(); }
int CSocket::sendmessage(char *ip, int port, CBuffer *source) { if(sockid<0)return -1; int size = 0; SOCKADDR_IN addr; if(proc == UDP_NORMAL ) { size = min(source->count, 8195); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = inet_addr(ip); size = sendto(sockid, source->data, size, 0, (SOCKADDR *)&addr, sizeof(SOCKADDR_IN)); } else if ( proc == UDP_MULTICAST ) { //...UDP MULTI-CAST RE-USES SAME ADDRESS size = min(source->count, 8195); //...For multi-cast : check if we are sending to a different port if ( port!= 0 ){ memcpy (&addr, &udpAddr , sizeof(SOCKADDR_IN) ); addr.sin_port = htons(port); } size = sendto(sockid, source->data, size, 0, (SOCKADDR *)&addr , sizeof(SOCKADDR_IN)); } else { CBuffer sendbuff; sendbuff.clear(); if(format == 0) { sendbuff.writeushort(source->count); sendbuff.addBuffer(source); size = send(sockid, sendbuff.data, sendbuff.count, 0); }else if(format == 1) { sendbuff.addBuffer(source); sendbuff.writechars(formatstr); size = send(sockid, sendbuff.data, sendbuff.count, 0); }else if(format == 2) size = send(sockid, source->data, source->count, 0); } if(size == EWOULDBLOCK)return -errno; return size; }
int CSocket::receiveBytes(CBuffer& pDestination, int pCount, int pMode) { char buff[8192]; int size = 0; fd_set set; struct timeval tm; pDestination.clear(); tm.tv_sec = 0; tm.tv_usec = 0; while(size < pCount) { if(!blocking) { FD_ZERO(&set); FD_SET((unsigned int)sockId,&set); select(sockId+1,&set,NULL,NULL,&tm); if (!FD_ISSET(sockId,&set)) return size; } int len = pCount - size; if(len > 8192) len = 8192; if(len < 0) return size; int a = recv(sockId, buff, len, 0); if(a == 0) return -1; if(a < 0) { if(lastError() == EWOULDBLOCK || lastError() == EMSGSIZE) break; else return -lastError(); } size+=a; pDestination.writeBytes(buff, a); if(udp) break; } return size; }
/* Never was great formulating =P */ bool CWordFilter::apply(CPlayer *pPlayer, CBuffer &pBuffer, int pCheck) { bool logsave = false, rctell = false; CBuffer start; CStringList found; int pos = 0, wc = 0; for (int i = 0; i < WordList.count(); i++) { WordMatch *word = (WordMatch *)WordList[i]; if (!word->check[pCheck]) continue; for (int j = 0; j < pBuffer.length(); j++) { for (int k = 0; k < word->match.length(); k++) { char c1 = pBuffer[j + k]; char c2 = word->match[k]; if (c2 != '?' && (isUpper(c2) && c2 != c1) || (isLower(c2) && toLower(c2) != toLower(c1))) { if (wc >= word->precision) { found.add(start); for (int l = 0; l < (int)sizeof(word->action); l++) { if (!word->action[l]) continue; switch (l) { case FILTERA_LOG: if (logsave) break; logsave = true; if (pPlayer != NULL) errorOut("wordfilter.txt", CBuffer() << pPlayer->accountName << " has used rude words while chatting: " << start); break; case FILTERA_REPLACE: pos = pBuffer.find(' ', j); pos = (pos == -1 ? start.length() : pos-j+1); for (int m = 0; m < pos; m++) pBuffer.replace(j + m, '*'); break; case FILTERA_TELLRC: if (rctell) break; rctell = true; if (pPlayer != NULL) sendRCPacket(CPacket() << (char)DRCLOG << pPlayer->accountName << " has used rude words while chatting: " << start); break; case FILTERA_WARN: pBuffer = (word->warnmessage.length() > 0 ? word->warnmessage : warnmessage); break; case FILTERA_JAIL: // kinda useless...? break; case FILTERA_BAN: if (pPlayer != NULL) { CBuffer pLog = CBuffer() << "\n" << getTimeStr(0) << "\n" << pPlayer->accountName << " has used rude words while chatting: " << start; pPlayer->setBan(pLog, true); } break; } } } start.clear(); wc = 0; break; } start.writeChar(c1); wc++; } } } return (found.count() > 0); }