X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;ds=sidebyside;f=include%2Fanna%2Fdiameter%2Fcodec%2FMessage.hpp;h=a3916f74b98bfded199bdcf729987c463b1f13a7;hb=4552131b751399a8b4fd323f5547f91c7cb0f978;hp=2b65175ef83d607034cbed61138b53c80fdc512c;hpb=4456556fc4cd3d24eab8d555acceae339d476c5b;p=anna.git diff --git a/include/anna/diameter/codec/Message.hpp b/include/anna/diameter/codec/Message.hpp index 2b65175..a3916f7 100644 --- a/include/anna/diameter/codec/Message.hpp +++ b/include/anna/diameter/codec/Message.hpp @@ -1,37 +1,9 @@ -// ANNA - Anna is Not Nothingness Anymore -// -// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo -// -// http://redmine.teslayout.com/projects/anna-suite -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of the copyright holder nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: eduardo.ramos.testillano@gmail.com -// cisco.tierra@gmail.com +// ANNA - Anna is Not Nothingness Anymore // +// // +// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo // +// // +// See project site at http://redmine.teslayout.com/projects/anna-suite // +// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE // #ifndef anna_diameter_codec_Message_hpp @@ -191,14 +163,20 @@ public: /** * Default constructor + * @param engine Codec engine used */ - Message(); + Message(Engine *engine = NULL); /** * Identified constructor * @param id Command identifier as pair (code,request-indicator). + * @param engine Codec engine used */ - Message(CommandId id); + Message(CommandId id, Engine *engine = NULL); + + + /** Sets the codec engine */ + void setEngine(Engine *engine) throw() { a_engine = engine; } // Length references @@ -266,24 +244,37 @@ public: /** Sets/unsets E bit activation. Application should not have to use this because dictionary information is used in order to configure flags when Message identifier is stored. + This flag MUST NOT be set in request messages (in this case, it will be ignored). @param activate Activates/deactivates the bit. True by default. */ - void setErrorBit(bool activate = true) throw() { if(activate) a_flags |= EBitMask; else a_flags &= (~EBitMask); } + void setErrorBit(bool activate = true) throw() { if(isRequest()) return; if(activate) a_flags |= EBitMask; else a_flags &= (~EBitMask); } /** Sets/unsets T bit activation. Application should not have to use this because dictionary information is used in order to configure flags when Message identifier is stored. + This flag MUST NOT be set in answer messages (in this case, it will be ignored). @param activate Activates/deactivates the bit. True by default. */ - void setPotentiallyReTransmittedMessageBit(bool activate = true) throw() { if(activate) a_flags |= TBitMask; else a_flags &= (~TBitMask); } + void setPotentiallyReTransmittedMessageBit(bool activate = true) throw() { if(isAnswer()) return; if(activate) a_flags |= TBitMask; else a_flags &= (~TBitMask); } /** - Sets the message application id + Sets the message application id. + + The codec engine could be configured to force a stack selection based in this field value: see #selectStackWithApplicationId. + In multistack applications (which also shall be monothreaded), you only have to take care about how to apply this method: the thing + is that you must not interleave message builds which belongs to different stacks. For example, you could think about setting the + message header for message A using stack A. Then, start to add the message header fields for a second message B using another stack B. + Following you would add the message A avps, but then, the stack is not going to be automatically changed (this is only done through this + method). The result could be unexpected when adding/encoding messages with a dictionary which does not correspond. + + @warning do not interleave build/encode operations between different messages which uses different stacks over the same codec engine. + It seems common sense, but it is not bad to advice about this. + @param aid Application-id. */ - void setApplicationId(U32 aid) throw() { a_applicationId = aid; } + void setApplicationId(U32 aid) throw(anna::RuntimeException); /** Sets the message hop-by-hop