aboutsummaryrefslogtreecommitdiffstats
path: root/gobi-api/GobiAPI_1.0.40/Core/DB2Utilities.h
diff options
context:
space:
mode:
Diffstat (limited to 'gobi-api/GobiAPI_1.0.40/Core/DB2Utilities.h')
-rwxr-xr-xgobi-api/GobiAPI_1.0.40/Core/DB2Utilities.h268
1 files changed, 268 insertions, 0 deletions
diff --git a/gobi-api/GobiAPI_1.0.40/Core/DB2Utilities.h b/gobi-api/GobiAPI_1.0.40/Core/DB2Utilities.h
new file mode 100755
index 0000000..b3223e1
--- /dev/null
+++ b/gobi-api/GobiAPI_1.0.40/Core/DB2Utilities.h
@@ -0,0 +1,268 @@
+/*===========================================================================
+FILE:
+ DB2Utilities.h
+
+DESCRIPTION:
+ Utility functions for packing/parsing protocol entities using the
+ database
+
+PUBLIC ENUMERATIONS AND METHODS:
+ sProtocolEntityKey
+ sDB2PackingInput
+ sDB2NavInput
+
+ MapQMIEntityTypeToProtocolType
+ MapQMIEntityTypeToQMIServiceType
+ MapQMIProtocolTypeToEntityType
+ DB2GetMaxBufferSize
+ DB2BuildQMIBuffer
+ DB2PackQMIBuffer
+ DB2ReduceQMIBuffer
+
+Copyright (c) 2011, Code Aurora Forum. All rights reserved.
+
+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 Code Aurora Forum 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.
+===========================================================================*/
+
+//---------------------------------------------------------------------------
+// Pragmas
+//---------------------------------------------------------------------------
+#pragma once
+
+//---------------------------------------------------------------------------
+// Include Files
+//---------------------------------------------------------------------------
+#include "CoreDatabase.h"
+#include "SharedBuffer.h"
+#include "ProtocolBuffer.h"
+#include "QMIEnum.h"
+
+#include <vector>
+
+//---------------------------------------------------------------------------
+// Definitions
+//---------------------------------------------------------------------------
+
+/*=========================================================================*/
+// Struct sProtocolEntityKey
+// Simple structure to initializing protocol entity keys easier
+/*=========================================================================*/
+struct sProtocolEntityKey
+{
+ public:
+ // (Inline) Constructor - default
+ sProtocolEntityKey()
+ { };
+
+ // (Inline) Constructor - single value keys
+ sProtocolEntityKey( ULONG val1 )
+ {
+ mKey.push_back( val1 );
+ };
+
+ // (Inline) Constructor - two value keys
+ sProtocolEntityKey(
+ ULONG val1,
+ ULONG val2 )
+ {
+ mKey.push_back( val1 );
+ mKey.push_back( val2 );
+ };
+
+ // (Inline) Constructor - three value keys
+ sProtocolEntityKey(
+ ULONG val1,
+ ULONG val2,
+ ULONG val3 )
+ {
+ mKey.push_back( val1 );
+ mKey.push_back( val2 );
+ mKey.push_back( val3 );
+ };
+
+ // (Inline) Constructor - psuedo-copy constructor
+ sProtocolEntityKey( const std::vector <ULONG> & key )
+ : mKey( key )
+ { };
+
+ // (Inline) Constructor - copy constructor
+ sProtocolEntityKey( const sProtocolEntityKey & key )
+ : mKey( key.mKey )
+ { };
+
+ // (Inline) Assignment operator
+ sProtocolEntityKey & operator = ( const sProtocolEntityKey & key )
+ {
+ mKey = key.mKey;
+ return *this;
+ };
+
+ // Cast operator to a protocol entity key
+ operator std::vector <ULONG>() const
+ {
+ return mKey;
+ };
+
+ /* Underlying key */
+ std::vector <ULONG> mKey;
+};
+
+/*=========================================================================*/
+// Struct sDB2PackingInput
+// Simple structure to make dealing packing easier
+/*=========================================================================*/
+struct sDB2PackingInput
+{
+ public:
+ // (Inline) Constructor - default
+ sDB2PackingInput()
+ : mpData( 0 ),
+ mDataLen( 0 ),
+ mbString( true )
+ { };
+
+ // (Inline) Constructor - parameterized (string payload)
+ sDB2PackingInput(
+ const sProtocolEntityKey & key,
+ LPCSTR pValue )
+ : mKey( key ),
+ mpData( 0 ),
+ mDataLen( 0 ),
+ mbString( true )
+ {
+ if (pValue != 0 && pValue[0] != 0)
+ {
+ mValues = pValue;
+ }
+ };
+
+ // (Inline) Constructor - parameterized (buffer payload)
+ sDB2PackingInput(
+ const sProtocolEntityKey & key,
+ const BYTE * pData,
+ ULONG dataLen )
+ : mKey( key ),
+ mpData( pData ),
+ mDataLen( dataLen ),
+ mbString( false )
+ {
+ // Nothing to do
+ };
+
+ // (Inline) Is this object in a valid state?
+ bool IsValid() const
+ {
+ // We need a key
+ if (mKey.size() <= 0)
+ {
+ return false;
+ }
+
+ return true;
+ };
+
+ /* Underlying key */
+ std::vector <ULONG> mKey;
+
+ /* Are the values specified by a string? */
+ bool mbString;
+
+ /* String of space delimited field values */
+ std::string mValues;
+
+ /* Buffer containing pre-formatted fields */
+ const BYTE * mpData;
+
+ /* Length of above buffer */
+ ULONG mDataLen;
+};
+
+/*=========================================================================*/
+// Struct sDB2NavInput
+// Simple structure to make dealing with key/payload easier
+/*=========================================================================*/
+struct sDB2NavInput
+{
+ public:
+ // (Inline) Constructor - default
+ sDB2NavInput()
+ : mpPayload( 0 ),
+ mPayloadLen( 0 )
+ { };
+
+ // (Inline) Constructor - parameterized
+ sDB2NavInput(
+ const std::vector <ULONG> & key,
+ const BYTE * pData,
+ ULONG dataLen )
+ : mKey( key ),
+ mpPayload( pData ),
+ mPayloadLen( dataLen )
+ { };
+
+ // (Inline) Is this object in a valid state?
+ bool IsValid() const
+ {
+ return (mKey.size() > 0 && mpPayload != 0 && mPayloadLen > 0);
+ };
+
+ /* Database key for payload entity */
+ std::vector <ULONG> mKey;
+
+ /* Payload */
+ const BYTE * mpPayload;
+
+ /* Size of above payload */
+ ULONG mPayloadLen;
+};
+
+// Map a DB protocol entity type to a buffer protocol type
+eProtocolType MapQMIEntityTypeToProtocolType( eDB2EntityType et );
+
+// Map a DB protocol entity type to a QMI service type
+eQMIService MapQMIEntityTypeToQMIServiceType( eDB2EntityType et );
+
+// Map a buffer protocol type to a DB protocol entity type
+eDB2EntityType MapQMIProtocolTypeToEntityType(
+ eProtocolType pt,
+ bool bIndication = false );
+
+// Return the maximum size of a payload buffer for given type of
+// protocol entity
+ULONG DB2GetMaxBufferSize( eDB2EntityType et );
+
+// Build an allocated shared buffer for the QMI protocol
+sSharedBuffer * DB2BuildQMIBuffer(
+ const std::vector <sDB2NavInput> & input );
+
+// Build an allocated shared buffer for the QMI protocol
+sSharedBuffer * DB2PackQMIBuffer(
+ const cCoreDatabase & db,
+ const std::vector <sDB2PackingInput> & input );
+
+// Reduce a QMI buffer to DB keys and payload
+std::vector <sDB2NavInput> DB2ReduceQMIBuffer( const sProtocolBuffer & buf );
+