void LabelOps::set( const Hash & hash, const std::string & label ) { BACKTRACE_BEGIN unsigned char buffer[ 1024 ]; struct Tongue::Header * header = reinterpret_cast< struct Tongue::Header * >( buffer ); struct Tongue::Label * labelHeader = reinterpret_cast< struct Tongue::Label * >( header + 1 ); unsigned char * labelText = reinterpret_cast< unsigned char * >( labelHeader + 1 ); struct Tongue::Hash * rawHash = reinterpret_cast< struct Tongue::Hash * >( labelText + label.size() ); if ( reinterpret_cast< unsigned char * >( rawHash + 1 ) > buffer + sizeof( buffer ) ) THROW( Error, "Label too long" ); header->opcode = static_cast< unsigned char >( Tongue::Opcode::SET_LABEL ); ASSERT( label.size() < ( 1 << 16 ) ); labelHeader->length = static_cast< unsigned short >( label.size() ); memcpy( labelText, label.c_str(), label.size() ); * rawHash = hash.raw(); size_t size = reinterpret_cast< unsigned char * >( rawHash + 1 ) - buffer; _socket.sendAll( buffer, size ); Stream::AckOps( _socket ).wait( "setting label" ); BACKTRACE_END_VERBOSE( "Hash " << hash << " Label " << label ); }