// ----------------------------------------------------------------------------- // CHttpCacheEntry::InternalizeL // // ----------------------------------------------------------------------------- // void CHttpCacheEntry::InternalizeL( RReadStream& aReadStream, const TDesC& aDirectory ) { // url length TInt len; len = aReadStream.ReadInt32L(); delete iUrl; iUrl=NULL; iUrl = HBufC8::NewL( len ); TPtr8 ptr8( iUrl->Des() ); // url aReadStream.ReadL( ptr8, len ); // calculate full path and filename length // aDirectory/ + "x/xxxxxxxx" : note aDirectory has trailing '/' len = aDirectory.Length() + KSubdirNameLength + KFilenameLength; HBufC* filename = HBufC::NewLC( len ); TPtr ptr( filename->Des() ); // Read max char length of filename. // NOTE: The filename and filename length is calculated by the code in // HttpCacheUtil::GenerateNameLC. The sub directory is the same as the // last char of the filename, e.g. ..\A\0123DCBA TBuf<KFilenameLength> uniqueFilename; aReadStream.ReadL( uniqueFilename , KFilenameLength ); TPtrC uniqueSubDir = uniqueFilename.Right(1); // assemble path and filename ptr.Format(_L("%S%S\\%S"), &aDirectory, &uniqueSubDir, &uniqueFilename); // SetFileNameL( filename->Des() ); // CleanupStack::PopAndDestroy(); // filename // la TReal64 la; la = aReadStream.ReadReal64L(); iLastAccessed = la; // ref iRef = aReadStream.ReadUint32L(); // size iBodySize = aReadStream.ReadUint32L( ); // size iHeaderSize = aReadStream.ReadUint32L( ); // protected iProtected = aReadStream.ReadInt32L(); // header data delete iHeaderBuffer; iHeaderBuffer = NULL; len = aReadStream.ReadInt32L(); iHeaderBuffer = HBufC8::NewL(len); TPtr8 header_ptr( iHeaderBuffer->Des() ); aReadStream.ReadL( header_ptr, len ); // SetState( ECacheComplete ); }
bool RealmConnection::_login() { UT_DEBUGMSG(("RealmConnection::_login()\n")); // FIXME: make this a combined asio buffer boost::shared_ptr<std::string> header_ptr(new std::string(2*sizeof(UT_uint32) + m_cookie.size(), '\0')); std::string& header = *header_ptr; UT_uint32 proto_magic = 0x000A0B01; UT_uint32 proto_version = 0x02; // FIXME: not Big Endian safe!! memcpy(&header[0], &proto_magic, sizeof(UT_uint32)); memcpy(&header[sizeof(UT_uint32)], &proto_version, sizeof(UT_uint32)); memcpy(&header[2*sizeof(UT_uint32)], m_cookie.data(), m_cookie.size()); // holds the login response information std::string response(1, '\0'); try { // send the login credententials // TODO: we should check the number of bytes written asio::write(m_socket, asio::buffer(header)); // read the login response // TODO: we should check the number of bytes read asio::read(m_socket, asio::buffer(&response[0], response.size())); } catch (asio::system_error e) { UT_DEBUGMSG(("Error while writing/writing protocol header: %s\n", e.what())); return false; } switch (response[0]) { case realm::protocol::HANDSHAKE_RESERVED: UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); return false; case realm::protocol::HANDSHAKE_OK: UT_DEBUGMSG(("Login response OK!\n")); break; case realm::protocol::HANDSHAKE_BAD_IDENTIFIER: UT_DEBUGMSG(("realm::protocol::HANDSHAKE_BAD_IDENTIFIER response!\n")); return false; case realm::protocol::HANDSHAKE_UNSUPPORTED_PROTOCOL: UT_DEBUGMSG(("realm::protocol::HANDSHAKE_UNSUPPORTED_PROTOCOL response!\n")); return false; case realm::protocol::HANDSHAKE_INVALID_COOKIE: UT_DEBUGMSG(("realm::protocol::HANDSHAKE_INVALID_COOKIE response!\n")); return false; default: UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); return false; } // read the user joined packet that contains our own user information, // as per protocol version 2 UserJoinedPacketPtr ujpp = _receiveUserJoinedPacket(); UT_return_val_if_fail(ujpp, false); UT_return_val_if_fail(ServiceAccountHandler::parseUserInfo(*ujpp->getUserInfo(), m_user_id), false); m_connection_id = ujpp->getConnectionId(); return true; }