Updated license
[anna.git] / include / anna / diameter / helpers / base / functions.hpp
1 // ANNA - Anna is Not Nothingness Anymore
2 //
3 // (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
4 //
5 // https://bitbucket.org/testillano/anna
6 //
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions
9 // are met:
10 //
11 //     * Redistributions of source code must retain the above copyright
12 // notice, this list of conditions and the following disclaimer.
13 //     * Redistributions in binary form must reproduce the above
14 // copyright notice, this list of conditions and the following disclaimer
15 // in the documentation and/or other materials provided with the
16 // distribution.
17 //     * Neither the name of Google Inc. nor the names of its
18 // contributors may be used to endorse or promote products derived from
19 // this software without specific prior written permission.
20 //
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 //
33 // Authors: eduardo.ramos.testillano@gmail.com
34 //          cisco.tierra@gmail.com
35
36
37 #ifndef anna_diameter_helpers_base_functions_hpp
38 #define anna_diameter_helpers_base_functions_hpp
39
40
41 // Local
42 #include <anna/diameter/defines.hpp>
43 #include <anna/config/defines.hpp>
44
45 #include <anna/core/RuntimeException.hpp>
46
47 // STL
48 #include <string>
49
50 //------------------------------------------------------------------------------
51 //---------------------------------------------------------------------- #define
52 //------------------------------------------------------------------------------
53
54 namespace anna {
55 class DataBlock;
56 }
57
58
59 namespace anna {
60
61 namespace diameter {
62
63 namespace helpers {
64
65 namespace base {
66
67
68 struct functions {
69
70   // getters & helpers
71
72   /**
73   * Gets the first level command Result-Code from datablock provided
74   *
75   * @param db Provided Message DataBlock
76   *
77   * @return Result-Code value
78   */
79   static U32 getResultCode(const anna::DataBlock &) throw(anna::RuntimeException);
80
81   /**
82   * Gets the tokenized by ';' Session-Id contents defined as '<DiameterIdentity>;<high 32 bits>;<low 32 bits>[;<optional value>]':
83   *
84   * @param sessionId Provided UTF8String Session-Id content
85   * @param diameterIdentity Sender Diameter Identity
86   * @param high High 64-bit-sequence part
87   * @param low Low 64-bit-sequence part
88   * @param optional Empty string when missing
89   */
90   static void decodeSessionId(const std::string &sessionId, std::string &diameterIdentity, U32 &high, U32 &low, std::string &optional) throw(anna::RuntimeException);
91
92   /**
93   * Gets the fixed Session-Id AVP (UTF8String) from datablock provided.
94   * Also gets the tokenized by ';' Session-Id contents defined as '<DiameterIdentity>;<high 32 bits>;<low 32 bits>[;<optional value>]':
95   *
96   * @param db Provided Message DataBlock
97   * @param diameterIdentity Sender Diameter Identity
98   * @param high High 64-bit-sequence part
99   * @param low Low 64-bit-sequence part
100   * @param optional Empty string when missing
101   *
102   * @return Session-Id
103   */
104   static std::string getSessionId(const anna::DataBlock &db, std::string &diameterIdentity, U32 &high, U32 &low, std::string &optional) throw(anna::RuntimeException);
105
106
107   /**
108   * Gets the fixed Session-Id AVP (UTF8String) from datablock provided.
109   *
110   * @param db Provided Message DataBlock
111   *
112   * @return Session-Id
113   */
114   static std::string getSessionId(const anna::DataBlock &db) throw(anna::RuntimeException) {
115     std::string dummy1, dummy4;
116     U32 dummy2, dummy3;
117     return (getSessionId(db, dummy1, dummy2, dummy3, dummy4));
118   }
119 };
120
121
122 }
123 }
124 }
125 }
126
127
128 #endif
129