您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ EndianConvert函数代码示例

51自学网 2021-06-01 20:37:59
  C++
这篇教程C++ EndianConvert函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中EndianConvert函数的典型用法代码示例。如果您正苦于以下问题:C++ EndianConvert函数的具体用法?C++ EndianConvert怎么用?C++ EndianConvert使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了EndianConvert函数的21个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: EndianConvert

bool DBCFileLoader::Load(const char *filename, const char *fmt){    uint32 header;    if(data)    {        delete [] data;        data=NULL;    }    FILE * f=fopen(filename,"rb");    if(!f)return false;    if(fread(&header,4,1,f)!=1)                             // Number of records        return false;    EndianConvert(header);    if(header!=0x43424457)        return false;                                       //'WDBC'    if(fread(&recordCount,4,1,f)!=1)                        // Number of records        return false;    EndianConvert(recordCount);    if(fread(&fieldCount,4,1,f)!=1)                         // Number of fields        return false;    EndianConvert(fieldCount);    if(fread(&recordSize,4,1,f)!=1)                         // Size of a record        return false;    EndianConvert(recordSize);    if(fread(&stringSize,4,1,f)!=1)                         // String size        return false;    EndianConvert(stringSize);    fieldsOffset = new uint32[fieldCount];    fieldsOffset[0] = 0;    for (uint32 i = 1; i < fieldCount; i++)    {        fieldsOffset[i] = fieldsOffset[i - 1];        if (fmt[i - 1] == 'b' || fmt[i - 1] == 'X')         // byte fields            fieldsOffset[i] += 1;        else                                                // 4 byte fields (int32/float/strings)            fieldsOffset[i] += 4;    }    data = new unsigned char[recordSize*recordCount+stringSize];    stringTable = data + recordSize*recordCount;    if(fread(data,recordSize*recordCount+stringSize,1,f)!=1)        return false;    fclose(f);    return true;}
开发者ID:artas,项目名称:quademu,代码行数:60,


示例2: EndianConvertReverse

int WorldSocket::iSendPacket(const WorldPacket& pct){    if (m_OutBuffer->space() < pct.size() + sizeof(ServerPktHeader))    {        errno = ENOBUFS;        return -1;    }    ServerPktHeader header;    header.cmd = pct.GetOpcode();    header.size = (uint16) pct.size() + 2;    EndianConvertReverse(header.size);    EndianConvert(header.cmd);    m_Crypt.EncryptSend((uint8*) & header, sizeof(header));    if (m_OutBuffer->copy((char*) & header, sizeof(header)) == -1)        { ACE_ASSERT(false); }    if (!pct.empty())        if (m_OutBuffer->copy((char*) pct.contents(), pct.size()) == -1)            { ACE_ASSERT(false); }    return 0;}
开发者ID:Aincent,项目名称:server,代码行数:28,


示例3: LockWriteBuffer

void LogonCommClientSocket::SendPacket(WorldPacket * data, bool no_crypto){	logonpacket header;	bool rv;	if(!m_connected || m_deleted)		return;	LockWriteBuffer();	header.opcode = data->GetOpcode();	EndianConvert(header.opcode);	header.size = (uint32)data->size();	EndianConvertReverse(header.size);	if(use_crypto && !no_crypto)		_sendCrypto.Process((unsigned char*)&header, (unsigned char*)&header, 6);	rv = WriteButHold((const uint8*)&header, 6);	if(data->size() > 0 && rv)	{		if(use_crypto && !no_crypto)			_sendCrypto.Process((unsigned char*)data->contents(), (unsigned char*)data->contents(), (unsigned int)data->size());		rv = Write((const uint8*)data->contents(), (uint32)data->size());	}	else if(rv)		rv = ForceSend();	UnlockWriteBuffer();}
开发者ID:h4s0n,项目名称:Sandshroud,代码行数:31,


示例4: ASSERT

float DB2FileLoaderRegularImpl::Record::getFloat(uint32 field, uint32 arrayIndex) const{    ASSERT(field < file._header->FieldCount);    float val = *reinterpret_cast<float*>(offset + GetOffset(field) + arrayIndex * sizeof(float));    EndianConvert(val);    return val;}
开发者ID:Jildor,项目名称:TrinityCore,代码行数:7,


示例5: EndianConvert

void WorldSocket::SendPacket(const WorldPacket& pct, bool immediate){    if (IsClosed())        return;    // Dump outgoing packet.    sLog.outWorldPacketDump(GetRemoteEndpoint().c_str(), pct.GetOpcode(), pct.GetOpcodeName(), pct, false);    ServerPktHeader header;    header.cmd = pct.GetOpcode();    EndianConvert(header.cmd);    header.size = static_cast<uint16>(pct.size() + 2);    EndianConvertReverse(header.size);    m_crypt.EncryptSend(reinterpret_cast<uint8 *>(&header), sizeof(header));    Write(reinterpret_cast<const char *>(&header), sizeof(header));    if (!!pct.size())        Write(reinterpret_cast<const char *>(pct.contents()), pct.size());    if (immediate)        ForceFlushOut();}
开发者ID:superwow,项目名称:mangos-classic,代码行数:26,


示例6: socket

/// Reconnect Challenge command handlerbool AuthSocket::_HandleReconnectChallenge(){    sLog.outStaticDebug("Entering _HandleReconnectChallenge");    if (socket().recv_len() < sizeof(sAuthLogonChallenge_C))        return false;    ///- Read the first 4 bytes (header) to get the length of the remaining of the packet    std::vector<uint8> buf;    buf.resize(4);    socket().recv((char *)&buf[0], 4);    EndianConvert(*((uint16*)(buf[0])));    uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;    sLog.outStaticDebug("[ReconnectChallenge] got header, body is %#04x bytes", remaining);    if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (socket().recv_len() < remaining))        return false;    //No big fear of memory outage (size is int16, i.e. < 65536)    buf.resize(remaining + buf.size() + 1);    buf[buf.size() - 1] = 0;    sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0];    ///- Read the remaining of the packet    socket().recv((char *)&buf[4], remaining);    sLog.outStaticDebug("[ReconnectChallenge] got full packet, %#04x bytes", ch->size);    sLog.outStaticDebug("[ReconnectChallenge] name(%d): '%s'", ch->I_len, ch->I);    _login = (const char*)ch->I;    PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_SESSIONKEY);    stmt->setString(0, _login);    PreparedQueryResult result = LoginDatabase.Query(stmt);    // Stop if the account is not found    if (!result)    {        sLog.outError("[ERROR] user %s tried to login and we cannot find his session key in the database.", _login.c_str());        socket().shutdown();        return false;    }    K.SetHexStr ((*result)[0].GetCString());    ///- Sending response    ByteBuffer pkt;    pkt << (uint8)  AUTH_RECONNECT_CHALLENGE;    pkt << (uint8)  0x00;    _reconnectProof.SetRand(16 * 8);    pkt.append(_reconnectProof.AsByteArray(16), 16);             // 16 bytes random    pkt << (uint64) 0x00 << (uint64) 0x00;                  // 16 bytes zeros    socket().send((char const*)pkt.contents(), pkt.size());    return true;}
开发者ID:mmihail,项目名称:trinitycore10353,代码行数:56,


示例7: fopen

void DBC::Load(const char *filename){    FILE *f = fopen(filename, "rb");    if(!f)    {        //printf("DBC %s Doesnt exist!/n",filename);        bLog.Error("DBC", "DBC %s doesn't exist!/n", filename);        return;    }    uint32 header;    fseek(f, 4, SEEK_SET);    fread(&header,4, 1, f);    EndianConvert(&header);    fread(&rows,4, 1, f);    EndianConvert(&rows);    fread(&cols, 4, 1, f);    EndianConvert(&cols);    fread(&weird2, 4, 1, f);    EndianConvert(&weird2);    fread(&dblength, 4, 1, f);    EndianConvert(&dblength);    tbl = new unsigned int[rows * cols];    db = new char[dblength];    format = new DBCFmat[cols];    strcpy(name,filename);    fread(tbl,rows*cols*4,1,f);    fread(db,dblength,1,f);    fclose(f);    loaded = true;    bLog.Notice("DBC", "Loaded %s (%u rows)", name, rows);}
开发者ID:Sandshroud,项目名称:Sandshroud-Prodigy,代码行数:40,


示例8: ACE_ASSERT

int WorldSocket::handle_input_header (void){    ACE_ASSERT (m_RecvWPct == NULL);    ACE_ASSERT (m_Header.length() == sizeof(Flexi::ClientPktHeader));    m_Crypt.DecryptRecv ((uint8*) m_Header.rd_ptr(), sizeof(Flexi::ClientPktHeader));    Flexi::ClientPktHeader& header = *((Flexi::ClientPktHeader*) m_Header.rd_ptr());    EndianConvertReverse(header.size);    EndianConvert(header.cmd);    if (header.size < 2)    {        Player* _player = m_Session ? m_Session->GetPlayer() : NULL;        sLog->outError("WorldSocket::handle_input_header(): client (account: %u, char [GUID: %u, name: %s]) sent malformed packet (size: %d, cmd: %d)",            m_Session ? m_Session->GetAccountId() : 0,            _player ? _player->GetGUIDLow() : 0,            _player ? _player->GetName() : "<none>",            header.size, header.cmd);        errno = EINVAL;        return -1;    }    header.size -= 2;    ACE_NEW_RETURN (m_RecvWPct, WorldPacket ((uint16) header.cmd, header.size), -1);    if (header.size > 0)    {        m_RecvWPct->resize (header.size);        m_RecvPct.base ((char*) m_RecvWPct->contents(), m_RecvWPct->size());    }    else    {        ACE_ASSERT(m_RecvPct.space() == 0);    }    return 0;}
开发者ID:Allowed,项目名称:Strawberry335,代码行数:42,


示例9: ACE_ASSERT

int WorldSocket::handle_input_header (void){    ACE_ASSERT (m_RecvWPct == NULL);    ACE_ASSERT (m_Header.length () == sizeof (ClientPktHeader));    m_Crypt.DecryptRecv ((ACE_UINT8*) m_Header.rd_ptr (), sizeof (ClientPktHeader));    ClientPktHeader& header = *((ClientPktHeader*) m_Header.rd_ptr ());    EndianConvertReverse(header.size);    EndianConvert(header.cmd);    if ((header.size < 4) || (header.size > 10240) ||        (header.cmd  < 0) || (header.cmd  > 10240) )    {        sLog.outError ("WorldSocket::handle_input_header: client sent mailformed packet size = %d , cmd = %d",                       header.size, header.cmd);        errno = EINVAL;        return -1;    }    header.size -= 4;    ACE_NEW_RETURN (m_RecvWPct, WorldPacket ((uint16) header.cmd, header.size), -1);    if(header.size > 0)    {        m_RecvWPct->resize (header.size);        m_RecvPct.base ((char*) m_RecvWPct->contents (), m_RecvWPct->size ());    }    else    {        ACE_ASSERT(m_RecvPct.space() == 0);    }    return 0;}
开发者ID:Anderss,项目名称:mangos,代码行数:39,


示例10: ACE_ASSERT

int PoolSocket::handle_input_header (void){    ACE_ASSERT (m_RecvWPct == NULL);    ACE_ASSERT (m_Header.length() == sizeof(Flexi::ClientPktHeader));    m_Crypt.DecryptRecv ((uint8*) m_Header.rd_ptr(), sizeof(Flexi::ClientPktHeader));    Flexi::ClientPktHeader& header = *((Flexi::ClientPktHeader*) m_Header.rd_ptr());    EndianConvertReverse(header.size);    EndianConvert(header.cmd);    if (header.size < 2)    {        sLog->outError ("PoolSocket::handle_input_header()");        errno = EINVAL;        return -1;    }    header.size -= 2;    ACE_NEW_RETURN (m_RecvWPct, WorldPacket ((uint16) header.cmd, header.size), -1);    if (header.size > 0)    {        m_RecvWPct->resize (header.size);        m_RecvPct.base ((char*) m_RecvWPct->contents(), m_RecvWPct->size());    }    else    {        ACE_ASSERT(m_RecvPct.space() == 0);    }    return 0;}
开发者ID:Allowed,项目名称:Strawberry335,代码行数:36,


示例11: DEBUG_LOG

/// Logon Challenge command handlerbool AuthSocket::_HandleLogonChallenge(){    DEBUG_LOG("Entering _HandleLogonChallenge");    if (recv_len() < sizeof(sAuthLogonChallenge_C))        return false;    ///- Read the first 4 bytes (header) to get the length of the remaining of the packet    std::vector<uint8> buf;    buf.resize(4);    recv((char*)&buf[0], 4);    EndianConvert(*((uint16*)(buf[0])));    uint16 remaining = ((sAuthLogonChallenge_C*)&buf[0])->size;    DEBUG_LOG("[AuthChallenge] got header, body is %#04x bytes", remaining);    if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (recv_len() < remaining))        return false;    // No big fear of memory outage (size is int16, i.e. < 65536)    buf.resize(remaining + buf.size() + 1);    buf[buf.size() - 1] = 0;    sAuthLogonChallenge_C* ch = (sAuthLogonChallenge_C*)&buf[0];    ///- Read the remaining of the packet    recv((char*)&buf[4], remaining);    DEBUG_LOG("[AuthChallenge] got full packet, %#04x bytes", ch->size);    DEBUG_LOG("[AuthChallenge] name(%d): '%s'", ch->I_len, ch->I);    // BigEndian code, nop in little endian case    // size already converted    EndianConvert(*((uint32*)(&ch->gamename[0])));    EndianConvert(ch->build);    EndianConvert(*((uint32*)(&ch->platform[0])));    EndianConvert(*((uint32*)(&ch->os[0])));    EndianConvert(*((uint32*)(&ch->country[0])));    EndianConvert(ch->timezone_bias);    EndianConvert(ch->ip);    ByteBuffer pkt;    _login = (const char*)ch->I;    _build = ch->build;    ///- Normalize account name    // utf8ToUpperOnlyLatin(_login); -- client already send account in expected form    // Escape the user login to avoid further SQL injection    // Memory will be freed on AuthSocket object destruction    _safelogin = _login;    LoginDatabase.escape_string(_safelogin);    pkt << (uint8) CMD_AUTH_LOGON_CHALLENGE;    pkt << (uint8) 0x00;    ///- Verify that this IP is not in the ip_banned table    // No SQL injection possible (paste the IP address as passed by the socket)    std::string address = get_remote_address();    LoginDatabase.escape_string(address);    QueryResult* result = LoginDatabase.PQuery("SELECT unbandate FROM ip_banned WHERE "                          //    permanent                    still banned                          "(unbandate = bandate OR unbandate > UNIX_TIMESTAMP()) AND ip = '%s'", address.c_str());    if (result)    {        pkt << (uint8)WOW_FAIL_BANNED;        BASIC_LOG("[AuthChallenge] Banned ip %s tries to login!", get_remote_address().c_str());        delete result;    }    else    {        ///- Get the account details from the account table        // No SQL injection (escaped user name)        result = LoginDatabase.PQuery("SELECT sha_pass_hash,id,locked,last_ip,gmlevel,v,s FROM account WHERE username = '%s'", _safelogin.c_str());        if (result)        {            ///- If the IP is 'locked', check that the player comes indeed from the correct IP address            bool locked = false;            if ((*result)[2].GetUInt8() == 1)               // if ip is locked            {                DEBUG_LOG("[AuthChallenge] Account '%s' is locked to IP - '%s'", _login.c_str(), (*result)[3].GetString());                DEBUG_LOG("[AuthChallenge] Player address is '%s'", get_remote_address().c_str());                if (strcmp((*result)[3].GetString(), get_remote_address().c_str()))                {                    DEBUG_LOG("[AuthChallenge] Account IP differs");                    pkt << (uint8) WOW_FAIL_SUSPENDED;                    locked = true;                }                else                {                    DEBUG_LOG("[AuthChallenge] Account IP matches");                }            }            else            {                DEBUG_LOG("[AuthChallenge] Account '%s' is not locked to ip", _login.c_str());            }            if (!locked)//.........这里部分代码省略.........
开发者ID:Adeer,项目名称:server,代码行数:101,


示例12: fopen

bool DB2FileLoader::Load(const char *filename, const char *fmt){    if (data)    {        delete [] data;        data = NULL;    }    FILE* f = fopen(filename, "rb");    if (!f)        return false;    uint32 header;    if (fread(&header, 4, 1, f) != 1)                        // Signature    {        fclose(f);        return false;    }    EndianConvert(header);    if (header != 0x32424457)    {        fclose(f);        return false;                                       //'WDB2'    }    if (fread(&recordCount, 4, 1, f) != 1)                 // Number of records    {        fclose(f);        return false;    }    EndianConvert(recordCount);    if (fread(&fieldCount, 4, 1, f) != 1)                 // Number of fields    {        fclose(f);        return false;    }    EndianConvert(fieldCount);    if (fread(&recordSize, 4, 1, f) != 1)                 // Size of a record    {        fclose(f);        return false;    }    EndianConvert(recordSize);    if (fread(&stringSize, 4, 1, f) != 1)                 // String size    {        fclose(f);        return false;    }    EndianConvert(stringSize);    /* NEW WDB2 FIELDS*/    if (fread(&tableHash, 4, 1, f) != 1)                  // Table hash    {        fclose(f);        return false;    }    EndianConvert(tableHash);    if (fread(&build, 4, 1, f) != 1)                     // Build    {        fclose(f);        return false;    }    EndianConvert(build);    if (fread(&unk1, 4, 1, f) != 1)                     // Unknown WDB2    {        fclose(f);        return false;    }    EndianConvert(unk1);    if (build > 12880)    {        if (fread(&minIndex, 4, 1, f) != 1)                           // MinIndex WDB2        {            fclose(f);            return false;        }        EndianConvert(minIndex);        if (fread(&maxIndex, 4, 1, f) != 1)                           // MaxIndex WDB2        {            fclose(f);            return false;        }        EndianConvert(maxIndex);//.........这里部分代码省略.........
开发者ID:Caydan,项目名称:mop548,代码行数:101,


示例13: socket

// Reconnect Challenge command handlerbool AuthSocket::_HandleReconnectChallenge(){    sLog->outDebug(LOG_FILTER_AUTHSERVER, "Entering _HandleReconnectChallenge");    if (socket().recv_len() < sizeof(sAuthLogonChallenge_C))        return false;    // Read the first 4 bytes (header) to get the length of the remaining of the packet    std::vector<uint8> buf;    buf.resize(4);    socket().recv((char *)&buf[0], 4);#if TRINITY_ENDIAN == TRINITY_BIGENDIAN    EndianConvert(*((uint16*)(buf[0])));#endif    uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;    sLog->outDebug(LOG_FILTER_AUTHSERVER, "[ReconnectChallenge] got header, body is %#04x bytes", remaining);    if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (socket().recv_len() < remaining))        return false;    // No big fear of memory outage (size is int16, i.e. < 65536)    buf.resize(remaining + buf.size() + 1);    buf[buf.size() - 1] = 0;    sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0];    // Read the remaining of the packet    socket().recv((char *)&buf[4], remaining);    sLog->outDebug(LOG_FILTER_AUTHSERVER, "[ReconnectChallenge] got full packet, %#04x bytes", ch->size);    sLog->outDebug(LOG_FILTER_AUTHSERVER, "[ReconnectChallenge] name(%d): '%s'", ch->I_len, ch->I);    _login = (const char*)ch->I;    PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_SESSIONKEY);    stmt->setString(0, _login);    PreparedQueryResult result = LoginDatabase.Query(stmt);    // Stop if the account is not found    if (!result)    {        sLog->outError(LOG_FILTER_AUTHSERVER, "'%s:%d' [ERROR] user %s tried to login and we cannot find his session key in the database.", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str());        socket().shutdown();        return false;    }    // Reinitialize build, expansion and the account securitylevel    _build = ch->build;    _os = (const char*)ch->os;    if (_os.size() > 4)        return false;    // Restore string order as its byte order is reversed    std::reverse(_os.begin(), _os.end());    Field* fields = result->Fetch();    uint8 secLevel = fields[2].GetUInt8();    _accountSecurityLevel = secLevel <= SEC_ADMINISTRATOR ? AccountTypes(secLevel) : SEC_ADMINISTRATOR;    K.SetHexStr ((*result)[0].GetCString());    // Sending response    ByteBuffer pkt;    pkt << uint8(AUTH_RECONNECT_CHALLENGE);    pkt << uint8(0x00);    _reconnectProof.SetRand(16 * 8);    pkt.append(_reconnectProof.AsByteArray(16), 16);        // 16 bytes random    pkt << uint64(0x00) << uint64(0x00);                    // 16 bytes zeros    socket().send((char const*)pkt.contents(), pkt.size());    return true;}
开发者ID:Cailiaock,项目名称:5.4.7-Wow-source,代码行数:73,


示例14: put

 template <typename T> void put(size_t pos,T value) {     EndianConvert(value);     put(pos,(uint8 *)&value,sizeof(value)); }
开发者ID:sdsgwangpeng,项目名称:kbengine,代码行数:5,


示例15: append

 template <typename T> void append(T value) {     EndianConvert(value);     append((uint8 *)&value, sizeof(value)); }
开发者ID:sdsgwangpeng,项目名称:kbengine,代码行数:5,


示例16: socket

// Reconnect Challenge command handlerbool AuthSocket::_HandleReconnectChallenge(){    sLog->outStaticDebug("Entering _HandleReconnectChallenge");    if (socket().recv_len() < sizeof(sAuthLogonChallenge_C))        return false;    // Read the first 4 bytes (header) to get the length of the remaining of the packet    std::vector<uint8> buf;    buf.resize(4);    socket().recv((char *)&buf[0], 4);#if STRAWBERRY_ENDIAN == STRAWBERRY_BIGENDIAN    EndianConvert(*((uint16*)(buf[0])));#endif    uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;    sLog->outStaticDebug("[ReconnectChallenge] got header, body is %#04x bytes", remaining);    if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (socket().recv_len() < remaining))        return false;    // No big fear of memory outage (size is int16, i.e. < 65536)    buf.resize(remaining + buf.size() + 1);    buf[buf.size() - 1] = 0;    sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0];    // Read the remaining of the packet    socket().recv((char *)&buf[4], remaining);    sLog->outStaticDebug("[ReconnectChallenge] got full packet, %#04x bytes", ch->size);    sLog->outStaticDebug("[ReconnectChallenge] name(%d): '%s'", ch->I_len, ch->I);    _login = (const char*)ch->I;    PreparedStatement* stmt = RealmDB.GetPreparedStatement(LOGIN_GET_SESSIONKEY);    stmt->setString(0, _login);    PreparedQueryResult result = RealmDB.Query(stmt);    // Stop if the account is not found    if (!result)    {        sLog->outError("[ERROR] user %s tried to login and we cannot find his session key in the database.", _login.c_str());        socket().shutdown();        return false;    }    // Reinitialize build, expansion and the account securitylevel    _build = ch->build;    _expversion = (AuthHelper::GetAcceptedClientBuilds(_build) ? LK_EXPANSION_FLAG : CL_EXPANSION_FLAG) | (AuthHelper::GetAcceptedClientBuilds(_build) ? BC_EXPANSION_FLAG : CL_EXPANSION_FLAG);    Field* fields = result->Fetch();    uint8 secLevel = fields[2].GetUInt8();    _accountSecurityLevel = secLevel <= SEC_ADMINISTRATOR ? AccountTypes(secLevel) : SEC_ADMINISTRATOR;    K.SetHexStr ((*result)[0].GetCString());    // Sending response    ByteBuffer pkt;    pkt << (uint8)AUTH_RECONNECT_CHALLENGE;    pkt << (uint8)0x00;    _reconnectProof.SetRand(16 * 8);    pkt.append(_reconnectProof.AsByteArray(16), 16);        // 16 bytes random    pkt << (uint64)0x00 << (uint64)0x00;                    // 16 bytes zeros    socket().send((char const*)pkt.contents(), pkt.size());    return true;}
开发者ID:sacel,项目名称:StrawberryEMU,代码行数:67,


示例17: socket

// Reconnect Challenge command handlerbool AuthSocket::_HandleReconnectChallenge(){    sLog->outStaticDebug("Entering _HandleReconnectChallenge");    if (socket().recv_len() < sizeof(sAuthLogonChallenge_C))        return false;    // Read the first 4 bytes (header) to get the length of the remaining of the packet    std::vector<uint8> buf;    buf.resize(4);    socket().recv((char *)&buf[0], 4);#if SKYFIRE_ENDIAN == SKYFIRE_BIGENDIAN    EndianConvert(*((uint16*)(buf[0])));#endif    uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;    sLog->outStaticDebug("[ReconnectChallenge] got header, body is %#04x bytes", remaining);    if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (socket().recv_len() < remaining))        return false;    // No big fear of memory outage (size is int16, i.e. < 65536)    buf.resize(remaining + buf.size() + 1);    buf[buf.size() - 1] = 0;    sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0];    // Read the remaining of the packet    socket().recv((char *)&buf[4], remaining);    sLog->outStaticDebug("[ReconnectChallenge] got full packet, %#04x bytes", ch->size);    sLog->outStaticDebug("[ReconnectChallenge] name(%d): '%s'", ch->I_len, ch->I);    _login = (const char*)ch->I;    QueryResult_AutoPtr result = LoginDatabase.PQuery ("SELECT sessionkey FROM account WHERE username = '%s'", _login.c_str ());    // Stop if the account is not found    if (!result)    {        sLog->outError("'%s:%d' [ERROR] user %s tried to login and we cannot find his session key in the database.", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str());        socket().shutdown();        return false;    }    // Reinitialize build, expansion and the account securitylevel    _build = ch->build;    _expversion = (AuthHelper::IsPostBCAcceptedClientBuild(_build) ? POST_BC_EXP_FLAG : NO_VALID_EXP_FLAG) | (AuthHelper::IsPreBCAcceptedClientBuild(_build) ? PRE_BC_EXP_FLAG : NO_VALID_EXP_FLAG);    _os = (const char*)ch->os;    if (_os.size() > 4)        return false;    // Restore string order as its byte order is reversed    std::reverse(_os.begin(), _os.end());    Field* fields = result->Fetch();    uint8 secLevel = fields[2].GetUInt8();    _accountSecurityLevel = secLevel <= SEC_ADMINISTRATOR ? AccountTypes(secLevel) : SEC_ADMINISTRATOR;    K.SetHexStr (fields[0].GetString ());    // Sending response    ByteBuffer pkt;    pkt << (uint8)AUTH_RECONNECT_CHALLENGE;    pkt << (uint8)0x00;    _reconnectProof.SetRand(16 * 8);    pkt.append(_reconnectProof.AsByteArray(16), 16);        // 16 bytes random    pkt << (uint64)0x00 << (uint64)0x00;                    // 16 bytes zeros    socket().send((char const*)pkt.contents(), pkt.size());    return true;}
开发者ID:hufsa,项目名称:SkyFire_one,代码行数:72,


示例18: ReadSkip

bool WorldSocket::ProcessIncomingData(){    ClientPktHeader header;    if (m_useExistingHeader)    {        m_useExistingHeader = false;        header = m_existingHeader;        ReadSkip(sizeof(ClientPktHeader));    }    else    {        if (!Read((char *)&header, sizeof(ClientPktHeader)))        {            errno = EBADMSG;            return false;        }        m_crypt.DecryptRecv((uint8 *)&header, sizeof(ClientPktHeader));        EndianConvertReverse(header.size);        EndianConvert(header.cmd);    }    // there must always be at least four bytes for the opcode,    // and 0x2800 is the largest supported buffer in the client    if ((header.size < 4) || (header.size > 0x2800) || (header.cmd >= NUM_MSG_TYPES))    {        sLog.outError("WorldSocket::ProcessIncomingData: client sent malformed packet size = %u , cmd = %u", header.size, header.cmd);            errno = EINVAL;        return false;    }    // the minus four is because we've already read the four byte opcode value    const uint16 validBytesRemaining = header.size - 4;    // check if the client has told us that there is more data than there is    if (validBytesRemaining > ReadLengthRemaining())    {        // we must preserve the decrypted header so as not to corrupt the crypto state, and to prevent duplicating work        m_useExistingHeader = true;        m_existingHeader = header;        // we move the read pointer backward because it will be skipped again later.  this is a slight kludge, but to solve        // it more elegantly would require introducing protocol awareness into the socket library, which we want to avoid        ReadSkip(-static_cast<int>(sizeof(ClientPktHeader)));        errno = EBADMSG;        return false;    }    Opcodes x;    const OpcodesList opcode = static_cast<OpcodesList>(header.cmd);    if (IsClosed())        return false;    std::unique_ptr<WorldPacket> pct(new WorldPacket(opcode, validBytesRemaining));    if (validBytesRemaining)    {        pct->append(InPeak(), validBytesRemaining);        ReadSkip(validBytesRemaining);    }    sLog.outWorldPacketDump(GetRemoteEndpoint().c_str(), pct->GetOpcode(), pct->GetOpcodeName(), *pct, true);    try    {        switch (opcode)        {            case CMSG_AUTH_SESSION:                if (m_session)                {                    sLog.outError("WorldSocket::ProcessIncomingData: Player send CMSG_AUTH_SESSION again");                    return false;                }                return HandleAuthSession(*pct);            case CMSG_PING:                return HandlePing(*pct);            case CMSG_KEEP_ALIVE:                DEBUG_LOG("CMSG_KEEP_ALIVE ,size: " SIZEFMTD " ", pct->size());                return true;            default:            {                if (!m_session)                {                    sLog.outError("WorldSocket::ProcessIncomingData: Client not authed opcode = %u", uint32(opcode));                    return false;                }                m_session->QueuePacket(std::move(pct));//.........这里部分代码省略.........
开发者ID:superwow,项目名称:mangos-classic,代码行数:101,


示例19: DEBUG_LOG

/// Logon Challenge command handlerbool AuthSocket::_HandleLogonChallenge(){    DEBUG_LOG("Entering _HandleLogonChallenge");    if (recv_len() < sizeof(sAuthLogonChallenge_C))        return false;    ///- Read the first 4 bytes (header) to get the length of the remaining of the packet    std::vector<uint8> buf;    buf.resize(4);    recv((char *)&buf[0], 4);    EndianConvert(*((uint16*)(buf[0])));    uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;    DEBUG_LOG("[AuthChallenge] got header, body is %#04x bytes", remaining);    if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (recv_len() < remaining))        return false;    //No big fear of memory outage (size is int16, i.e. < 65536)    buf.resize(remaining + buf.size() + 1);    buf[buf.size() - 1] = 0;    sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0];    ///- Read the remaining of the packet    recv((char *)&buf[4], remaining);    DEBUG_LOG("[AuthChallenge] got full packet, %#04x bytes", ch->size);    DEBUG_LOG("[AuthChallenge] name(%d): '%s'", ch->I_len, ch->I);    // BigEndian code, nop in little endian case    // size already converted    EndianConvert(*((uint32*)(&ch->gamename[0])));    EndianConvert(ch->build);    EndianConvert(*((uint32*)(&ch->platform[0])));    EndianConvert(*((uint32*)(&ch->os[0])));    EndianConvert(*((uint32*)(&ch->country[0])));    EndianConvert(ch->timezone_bias);    EndianConvert(ch->ip);    ByteBuffer pkt;    _login = (const char*)ch->I;    _build = ch->build;    _os = (const char*)ch->os;    if(_os.size() > 4)        return false;    ///- Normalize account name    //utf8ToUpperOnlyLatin(_login); -- client already send account in expected form    //Escape the user login to avoid further SQL injection    //Memory will be freed on AuthSocket object destruction    _safelogin = _login;    LoginDatabase.escape_string(_safelogin);    // Starting CMD_AUTH_LOGON_CHALLENGE    AuthResult result = WOW_FAIL_UNKNOWN0;    ///- Verify that this IP is not in the ip_banned table    // No SQL injection possible (paste the IP address as passed by the socket)    std::string address = get_remote_address();    LoginDatabase.escape_string(address);    QueryResult* qresult = LoginDatabase.PQuery("SELECT unbandate FROM ip_banned WHERE "    //    permanent                    still banned        "(unbandate = bandate OR unbandate > UNIX_TIMESTAMP()) AND ip = '%s'", address.c_str());    if (qresult)    {        result = WOW_FAIL_BANNED;        BASIC_LOG("[AuthChallenge] Banned ip %s tries to login!", get_remote_address().c_str());        delete qresult;    }    else    {        ///- Get the account details from the account table        // No SQL injection (escaped user name)        //qresult = LoginDatabase.PQuery("SELECT sha_pass_hash,id,locked,last_ip,gmlevel,v,s FROM account WHERE username = '%s'",_safelogin.c_str());        qresult = LoginDatabase.PQuery("SELECT a.sha_pass_hash,a.id,a.locked,a.last_ip,aa.gmlevel,a.v,a.s FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE username = '%s'", _safelogin.c_str());        if (qresult)        {            std::string rI = (*qresult)[0].GetCppString();            uint32 accountId = (*qresult)[1].GetUInt32();            uint8 locked = (*qresult)[2].GetUInt8();            std::string lastIP = (*qresult)[3].GetString();            uint8 secLevel = (*qresult)[4].GetUInt8();            std::string databaseV = (*qresult)[5].GetCppString();            std::string databaseS = (*qresult)[6].GetCppString();            bool blockLogin = false;            if (sConfig.GetBoolDefault("MultiIPCheck", false))            {                int32 iplimit = sConfig.GetIntDefault("MultiIPLimit", 10);                int32 multiIPdelay = sConfig.GetIntDefault("MultiIPPeriodInHours", 48);                // If a GM account login ignore MultiIP                QueryResult* ipcheck = LoginDatabase.PQuery("SELECT id FROM account WHERE last_ip = '%s' AND id != %u AND last_login > NOW() - INTERVAL %u HOUR ORDER BY last_login DESC;", get_remote_address().c_str(), accountId, multiIPdelay);                if (ipcheck)//.........这里部分代码省略.........
开发者ID:Jojo2323,项目名称:mangos3,代码行数:101,


示例20: DEBUG_LOG

/// Logon Challenge command handlerbool AuthSocket::_HandleLogonChallenge(){    DEBUG_LOG("Entering _HandleLogonChallenge");    if (ibuf.GetLength() < sizeof(sAuthLogonChallenge_C))        return false;    ///- Read the first 4 bytes (header) to get the length of the remaining of the packet    std::vector<uint8> buf;    buf.resize(4);    ibuf.Read((char *)&buf[0], 4);    EndianConvert(*((uint16*)(buf[0])));    uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;    DEBUG_LOG("[AuthChallenge] got header, body is %#04x bytes", remaining);    if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (ibuf.GetLength() < remaining))        return false;    //No big fear of memory outage (size is int16, i.e. < 65536)    buf.resize(remaining + buf.size() + 1);    buf[buf.size() - 1] = 0;    sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0];    // BigEndian code, nop in little endian case    // size already converted    EndianConvert(*((uint32*)(&ch->gamename[0])));    EndianConvert(ch->build);    EndianConvert(*((uint32*)(&ch->platform[0])));    EndianConvert(*((uint32*)(&ch->os[0])));    EndianConvert(*((uint32*)(&ch->country[0])));    EndianConvert(ch->timezone_bias);    EndianConvert(ch->ip);    ///- Read the remaining of the packet    ibuf.Read((char *)&buf[4], remaining);    DEBUG_LOG("[AuthChallenge] got full packet, %#04x bytes", ch->size);    DEBUG_LOG("[AuthChallenge] name(%d): '%s'", ch->I_len, ch->I);    ByteBuffer pkt;    _login = (const char*)ch->I;    _build = ch->build;    ///- Normalize account name    //utf8ToUpperOnlyLatin(_login); -- client already send account in expected form    //Escape the user login to avoid further SQL injection    //Memory will be freed on AuthSocket object destruction    _safelogin=_login;    dbRealmServer.escape_string(_safelogin);    pkt << (uint8) AUTH_LOGON_CHALLENGE;    pkt << (uint8) 0x00;    ///- Verify that this IP is not in the ip_banned table    // No SQL injection possible (paste the IP address as passed by the socket)    dbRealmServer.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");    std::string address = GetRemoteAddress();    dbRealmServer.escape_string(address);    QueryResult *result = dbRealmServer.PQuery(  "SELECT * FROM ip_banned WHERE ip = '%s'",address.c_str());    if(result)    {        pkt << (uint8)REALM_AUTH_ACCOUNT_BANNED;        sLog.outBasic("[AuthChallenge] Banned ip %s tries to login!",GetRemoteAddress().c_str ());        delete result;    }    else    {        ///- Get the account details from the account table        // No SQL injection (escaped user name)        result = dbRealmServer.PQuery("SELECT sha_pass_hash,id,locked,last_ip,gmlevel FROM account WHERE username = '%s'",_safelogin.c_str ());        if( result )        {            ///- If the IP is 'locked', check that the player comes indeed from the correct IP address            bool locked = false;            if((*result)[2].GetUInt8() == 1)            // if ip is locked            {                DEBUG_LOG("[AuthChallenge] Account '%s' is locked to IP - '%s'", _login.c_str(), (*result)[3].GetString());                DEBUG_LOG("[AuthChallenge] Player address is '%s'", GetRemoteAddress().c_str());                if ( strcmp((*result)[3].GetString(),GetRemoteAddress().c_str()) )                {                    DEBUG_LOG("[AuthChallenge] Account IP differs");                    pkt << (uint8) REALM_AUTH_ACCOUNT_FREEZED;                    locked=true;                }                else                {                    DEBUG_LOG("[AuthChallenge] Account IP matches");                }            }            else            {                DEBUG_LOG("[AuthChallenge] Account '%s' is not locked to ip", _login.c_str());            }            if (!locked)//.........这里部分代码省略.........
开发者ID:801616,项目名称:mangos,代码行数:101,


示例21: DEBUG_LOG

/// Logon Challenge command handlerbool AuthSocket::_HandleLogonChallenge(){    DEBUG_LOG("Entering _HandleLogonChallenge");    if (ibuf.GetLength() < sizeof(sAuthLogonChallenge_C))        return false;    ///- Read the first 4 bytes (header) to get the length of the remaining of the packet    std::vector<uint8> buf;    buf.resize(4);    ibuf.Read((char *)&buf[0], 4);    EndianConvert(*((uint16*)(buf[0])));    uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;    DEBUG_LOG("[AuthChallenge] got header, body is %#04x bytes", remaining);    if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (ibuf.GetLength() < remaining))        return false;    //No big fear of memory outage (size is int16, i.e. < 65536)    buf.resize(remaining + buf.size() + 1);    buf[buf.size() - 1] = 0;    sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0];    // BigEndian code, nop in little endian case    // size already converted    EndianConvert(*((uint32*)(&ch->gamename[0])));    EndianConvert(ch->build);    EndianConvert(*((uint32*)(&ch->platform[0])));    EndianConvert(*((uint32*)(&ch->os[0])));    EndianConvert(*((uint32*)(&ch->country[0])));    EndianConvert(ch->timezone_bias);    EndianConvert(ch->ip);    ///- Read the remaining of the packet    ibuf.Read((char *)&buf[4], remaining);    DEBUG_LOG("[AuthChallenge] got full packet, %#04x bytes", ch->size);    DEBUG_LOG("[AuthChallenge] name(%d): '%s'", ch->I_len, ch->I);    ByteBuffer pkt;    _login = (const char*)ch->I;    ///- Normalize account name    //utf8ToUpperOnlyLatin(_login); -- client already send account in expected form    //Escape the user login to avoid further SQL injection    //Memory will be freed on AuthSocket object destruction    _safelogin=_login;    dbRealmServer.escape_string(_safelogin);    ///- Check if the client has one of the expected version numbers    bool valid_version=false;    int accepted_versions[]=EXPECTED_MANGOS_CLIENT_BUILD;    for(int i=0;accepted_versions[i];i++)        if(ch->build==accepted_versions[i])    {        valid_version=true;        break;    }    /// <ul><li> if this is a valid version    if(valid_version)    {        pkt << (uint8) AUTH_LOGON_CHALLENGE;        pkt << (uint8) 0x00;        ///- Verify that this IP is not in the ip_banned table        // No SQL injection possible (paste the IP address as passed by the socket)        dbRealmServer.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");        std::string address = GetRemoteAddress();        dbRealmServer.escape_string(address);        QueryResult *result = dbRealmServer.PQuery(  "SELECT * FROM ip_banned WHERE ip = '%s'",address.c_str());        if(result)        {            pkt << (uint8)REALM_AUTH_ACCOUNT_BANNED;            sLog.outBasic("[AuthChallenge] Banned ip %s tries to login!",GetRemoteAddress().c_str ());            delete result;        }        else        {            ///- Get the account details from the account table            // No SQL injection (escaped user name)            result = dbRealmServer.PQuery("SELECT sha_pass_hash,id,locked,last_ip,gmlevel FROM account WHERE username = '%s'",_safelogin.c_str ());            if( result )            {                ///- If the IP is 'locked', check that the player comes indeed from the correct IP address                bool locked = false;                if((*result)[2].GetUInt8() == 1)            // if ip is locked                {                    DEBUG_LOG("[AuthChallenge] Account '%s' is locked to IP - '%s'", _login.c_str(), (*result)[3].GetString());                    DEBUG_LOG("[AuthChallenge] Player address is '%s'", GetRemoteAddress().c_str());                    if ( strcmp((*result)[3].GetString(),GetRemoteAddress().c_str()) )                    {                        DEBUG_LOG("[AuthChallenge] Account IP differs");                        pkt << (uint8) REALM_AUTH_ACCOUNT_FREEZED;                        locked=true;//.........这里部分代码省略.........
开发者ID:Dump,项目名称:mangos,代码行数:101,



注:本文中的EndianConvert函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ Endpoint_ClearIN函数代码示例
C++ End_Progress函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。