Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' (0.0.12)
Browse files Browse the repository at this point in the history
  • Loading branch information
fbraem committed Sep 24, 2015
2 parents 0fee458 + e178913 commit ec094dd
Show file tree
Hide file tree
Showing 108 changed files with 5,175 additions and 566 deletions.
76 changes: 76 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
cmake_minimum_required(VERSION 2.6)

project(MQWebSolution)

if (CMAKE_BUILD_TYPE STREQUAL debug)
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin/debug)
else()
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin/release)
endif()

foreach(pocolib Foundation Util XML Net JSON Data DataSQLite)

if (CMAKE_BUILD_TYPE STREQUAL debug)
set(pocolibname ${pocolib}d)
else()
set(pocolibname ${pocolib})
endif()

message(STATUS "Searching POCO library ${pocolib}")
set(POCO_LIB POCO_${pocolib}_LIBRARY)

if ( POCO_PREFIX )
if ( POCO_NO_INSTALL )
set(POCO_LIB_SEARCH_PATH "${POCO_PREFIX}/lib/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}")
else()
set(POCO_LIB_SEARCH_PATH "${POCO_PREFIX}/lib")
endif()
find_library(${POCO_LIB} NAMES Poco${pocolibname}
PATHS ${POCO_LIB_SEARCH_PATH} NO_DEFAULT_PATH
)
endif()
find_library(${POCO_LIB} NAMES Poco${pocolibname})

if (${POCO_LIB})
message(STATUS "POCO ${pocolib} found: ${${POCO_LIB}}")
else()
message(FATAL_ERROR "No POCO ${pocolibname} library found!")
endif()

if (pocolib STREQUAL "Foundation")
set(POCO_INC_H Poco/${pocolib}.h)
elseif(pocolib STREQUAL "DataSQLite")
set(POCO_INC_H Poco/Data/SQLite/SQLite.h)
else()
set(POCO_INC_H Poco/${pocolib}/${pocolib}.h)
endif()
message(STATUS "Searching ${POCO_INC_H}")

set(POCO_INCLUDE_DIR POCO_${pocolib}_INCLUDE)
if ( POCO_PREFIX )
if ( POCO_NO_INSTALL )
set(POCO_INC_SEARCH_PATH "${POCO_PREFIX}/../${pocolib}/include" "${POCO_PREFIX}/${pocolib}/include")
else()
set(POCO_INC_SEARCH_PATH "${POCO_PREFIX}/include")
endif()
message(STATUS "Search in ${POCO_INC_SEARCH_PATH}")
find_path(${POCO_INCLUDE_DIR} NAMES ${POCO_INC_H}
PATHS ${POCO_INC_SEARCH_PATH} NO_DEFAULT_PATH
)
endif()
find_path(${POCO_INCLUDE_DIR} NAMES ${POCO_INC_H})

if (${POCO_INCLUDE_DIR})
message(STATUS "POCO ${pocolib} include directory: ${${POCO_INCLUDE_DIR}}")
else()
message(FATAL_ERROR "No POCO ${pocolib} include directory found")
endif()
endforeach()

set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

#set(CMAKE_BUILD_DIR ${CMAKE_SOURCE_DIR}/build)

add_subdirectory(MQ)
add_subdirectory(MQWeb)
11 changes: 11 additions & 0 deletions ChangeLog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
0.0.12
- Add inquire topic
- Add inquire topicstatus (tpstatus)
- Add inquire subscription (sub)
- Add inquire subscription status (sbstatus)
- Add suspend cluster qmgr
- Add resume cluster qmgr
- First steps in adding websocket for browsing messages
- Add inquire channel initiator (chinit)
- Start support for CMake

0.0.11
- Add inquire connection (conn)
- Add inquire namelist (nl)
Expand Down
13 changes: 13 additions & 0 deletions MQ/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
cmake_minimum_required(VERSION 2.6)

project(MQ)

set (PROJECT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set (PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)

file(GLOB SOURCES "${PROJECT_SOURCE_DIR}/*.cpp")

include_directories("${PROJECT_INCLUDE_DIR}" "${POCO_Foundation_INCLUDE}" "${POCO_Util_INCLUDE}" "/opt/mqm/inc")

add_library(mq STATIC ${SOURCES})
set_target_properties(mq PROPERTIES DEBUG_POSTFIX "d")
139 changes: 137 additions & 2 deletions MQ/include/MQ/Buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,143 @@

namespace MQ {

typedef Poco::Buffer<unsigned char> Buffer;
typedef Poco::SharedPtr<Buffer> BufferPtr;
class Buffer
/// Wrapper class for Poco::Buffer
{
public:

typedef Poco::SharedPtr<Buffer> Ptr;

Buffer(size_t size = 0);
/// Constructor

explicit Buffer(MQBYTE* bytes, std::size_t size);
/// Constructor. Warning: The buffer doesn't own the memory!

explicit Buffer(const MQBYTE* bytes, std::size_t size);
/// Constructor. Note: Buffer will copy the memory and takes ownership!

Buffer(const std::string& hex);
/// Decodes a string in hex to a buffer

virtual ~Buffer();
/// Destructor

unsigned char chr(std::size_t pos = 0) const;
/// Returns the character on the given position

void clear();
/// Clears the buffer

void copyTo(MQBYTE* target, std::size_t size) const;
/// Copies the buffer to the target

MQBYTE* data(std::size_t pos = 0);
/// Returns a pointer to the given position

const MQBYTE* data(std::size_t pos = 0) const;
/// Returns a pointer to the given position (const version)

bool hasAllNullBytes() const;
/// Returns true when all bytes are null bytes

size_t size() const;
/// Returns the size

std::string toString() const;
/// Constructs a string from the buffer

void fromHex(const std::string& hex);
/// Decodes the hexadecimal string and fills the
/// buffer until the size of the buffer is reached.

void set(const Buffer& buffer);
/// Copies the content of the buffer into this buffer.

void set(const Buffer::Ptr& buffer);
/// Copies the content of the buffer into this buffer.

std::string toHex() const;
/// Encodes the buffer as hex

void resize(std::size_t size, bool preserveContent = true);
/// Resizes the buffer

private:

Buffer(const Buffer& );
Buffer& operator =(const Buffer& other);

Poco::Buffer<MQBYTE> _buffer;
};

inline MQBYTE Buffer::chr(std::size_t pos) const
{
poco_assert_dbg(pos < _buffer.size());
return _buffer[pos];
}

inline void Buffer::clear()
{
_buffer.clear();
}

inline void Buffer::copyTo(MQBYTE* target, std::size_t size) const
{
std::memset(target, 0, size);
std::memcpy(target,
_buffer.begin(),
_buffer.size() > size ? size : _buffer.size());
}

inline const MQBYTE* Buffer::data(std::size_t pos) const
{
poco_assert_dbg(pos < _buffer.size());
return &_buffer[pos];
}

inline MQBYTE* Buffer::data(std::size_t pos)
{
poco_assert_dbg(pos < _buffer.size());
return &_buffer[pos];
}

inline bool Buffer::hasAllNullBytes() const
{
for(std::size_t i = 0; i < _buffer.size(); ++i)
{
if ( _buffer[i] != 0 )
{
return false;
}
}
return true;
}

inline void Buffer::set(const Buffer& buffer)
{
_buffer.assign(buffer.data(), buffer.size());
}

inline void Buffer::set(const Buffer::Ptr& buffer)
{
_buffer.assign(buffer->data(), buffer->size());
}

inline size_t Buffer::size() const
{
return _buffer.size();
}

inline void Buffer::resize(std::size_t size, bool preserveContent)
{
_buffer.resize(size, preserveContent);
}

inline std::string Buffer::toString() const
{
return std::string((const char*) _buffer.begin(), _buffer.size());
}

} // namespace MQ

Expand Down
68 changes: 45 additions & 23 deletions MQ/include/MQ/MQFunctions.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,28 +33,34 @@
namespace MQ {


typedef void (*ConnFn)(PMQCHAR, PMQHCONN, PMQLONG, PMQLONG);
typedef void (*ConnFn)(MQCHAR*, MQHCONN*, MQLONG*, MQLONG*);


typedef void (*ConnxFn)(PMQCHAR, PMQCNO, PMQHCONN, PMQLONG, PMQLONG);
typedef void (*ConnxFn)(MQCHAR*, MQCNO*, MQHCONN*, MQLONG*, MQLONG*);


typedef void (*OpenFn)(MQHCONN, PMQOD, MQLONG, PMQHOBJ, PMQLONG, PMQLONG);
typedef void (*OpenFn)(MQHCONN, MQOD*, MQLONG, MQHOBJ*, MQLONG*, MQLONG*);


typedef void (*PutFn) (MQHCONN, MQHOBJ, PMQMD, PMQPMO, MQLONG, PMQBYTE, PMQLONG, PMQLONG);
typedef void (*PutFn) (MQHCONN, MQHOBJ, MQMD*, MQPMO*, MQLONG, MQBYTE*, MQLONG*, MQLONG*);


typedef void (*GetFn) (MQHCONN, MQHOBJ, PMQMD, PMQGMO, MQLONG, PMQBYTE, PMQLONG, PMQLONG, PMQLONG);
typedef void (*GetFn) (MQHCONN, MQHOBJ, MQMD*, MQGMO*, MQLONG, MQBYTE*, MQLONG*, MQLONG*, MQLONG*);


typedef void (*CloseFn)(MQHCONN, PMQHOBJ, MQLONG, PMQLONG, PMQLONG);
typedef void (*CloseFn)(MQHCONN, MQHOBJ*, MQLONG, MQLONG*, MQLONG*);


typedef void (*DiscFn)(PMQHCONN, PMQLONG, PMQLONG);
typedef void (*DiscFn)(MQHCONN*, MQLONG*, MQLONG*);


typedef void (*InqFn)(MQHCONN, MQHOBJ, MQLONG, PMQLONG, MQLONG, PMQLONG, MQLONG, PMQCHAR, PMQLONG, PMQLONG);
typedef void (*InqFn)(MQHCONN, MQHOBJ, MQLONG, MQLONG*, MQLONG, MQLONG*, MQLONG, MQCHAR*, MQLONG*, MQLONG*);


typedef void (*CbFn)(MQHCONN, MQLONG, MQCBD*, MQHOBJ, MQMD*, MQGMO*, MQLONG*, MQLONG*);


typedef void (*CtlFn)(MQHCONN, MQLONG, MQCTLO*, MQLONG*, MQLONG*);

class MQFunctions
/// Helper class for calling Websphere MQ functions dynamically. Depending on the loaded library
Expand All @@ -78,54 +84,66 @@ class MQFunctions
MQHCONN conn(const std::string& qmgrName);
/// Calls MQCONN. Can throw an MQException.

void conn(PMQCHAR qmgrName, PMQHCONN hconn, PMQLONG cc, PMQLONG rc);
void conn(MQCHAR* qmgrName, MQHCONN* hconn, MQLONG* cc, MQLONG* rc);
/// Calls MQCONN. Doesn't throw an MQException.

void connx(PMQCHAR qmgrName, PMQCNO connectOpts, PMQHCONN hconn, PMQLONG cc, PMQLONG rc);
void connx(MQCHAR* qmgrName, MQCNO* connectOpts, MQHCONN* hconn, MQLONG* cc, MQLONG* rc);
/// Calls MQCONNX. Doesn't throw an MQException.

MQHCONN connx(const std::string& qmgrName, PMQCNO connectOpts);
MQHCONN connx(const std::string& qmgrName, MQCNO* connectOpts);
/// Calls MQCONNX. Can throw an MQException.

void open(MQHCONN conn, PMQOD od, MQLONG options, PMQHOBJ obj, PMQLONG cc, PMQLONG rc);
void open(MQHCONN conn, MQOD* od, MQLONG options, MQHOBJ* obj, MQLONG* cc, MQLONG* rc);
/// Calls MQOPEN. Doesn't throw an MQException.

MQHOBJ open(MQHCONN conn, PMQOD od, MQLONG options);
MQHOBJ open(MQHCONN conn, MQOD* od, MQLONG options);
/// Calls MQOPEN. Can throw an MQException.

void put(MQHCONN conn, MQHOBJ obj, PMQMD md, PMQPMO options, MQLONG size, PMQBYTE buffer, PMQLONG cc, PMQLONG rc);
void put(MQHCONN conn, MQHOBJ obj, MQMD* md, MQPMO* options, MQLONG size, MQBYTE* buffer, MQLONG* cc, MQLONG* rc);
/// Calls MQPUT. Doesn't throw an MQException.

void put(MQHCONN conn, MQHOBJ obj, PMQMD md, PMQPMO options, MQLONG size, PMQBYTE buffer);
void put(MQHCONN conn, MQHOBJ obj, MQMD* md, MQPMO* options, MQLONG size, MQBYTE* buffer);
/// Calls MQPUT. Can throw an MQException.

void get(MQHCONN conn, MQHOBJ obj, PMQMD md, PMQGMO options, MQLONG size, PMQBYTE buffer, PMQLONG dataLength, PMQLONG cc, PMQLONG rc);
void get(MQHCONN conn, MQHOBJ obj, MQMD* md, MQGMO* options, MQLONG size, MQBYTE* buffer, MQLONG* dataLength, MQLONG* cc, MQLONG* rc);
/// Calls MQGET. Doesn't throw an MQException.

void get(MQHCONN conn, MQHOBJ obj, PMQMD md, PMQGMO options, MQLONG size, PMQBYTE buffer, PMQLONG dataLength);
void get(MQHCONN conn, MQHOBJ obj, MQMD* md, MQGMO* options, MQLONG size, MQBYTE* buffer, MQLONG* dataLength);
/// Calls MQGET. Can throw an MQException.

void close(MQHCONN conn, MQHOBJ* obj, MQLONG options, PMQLONG cc, PMQLONG rc);
void close(MQHCONN conn, MQHOBJ* obj, MQLONG options, MQLONG* cc, MQLONG* rc);
/// Calls MQCLOSE. Doesn't throw an MQException.

void close(MQHCONN conn, MQHOBJ* obj, MQLONG options);
/// Calls MQCLOSE. Can throw an MQException.

void disc(PMQHCONN conn, PMQLONG cc, PMQLONG rc);
void disc(MQHCONN* conn, MQLONG* cc, MQLONG* rc);
/// Calls MQDISC. Doesn't throw an MQException.

void disc(PMQHCONN conn);
void disc(MQHCONN* conn);
/// Calls MQDISC. Can throw an MQException.

void inq(MQHCONN conn, MQHOBJ obj, MQLONG selectorCount, PMQLONG selectors, MQLONG intAttrCount, PMQLONG intAttrs, MQLONG charAttrLength, PMQCHAR charAttrs, PMQLONG cc, PMQLONG rc);
void inq(MQHCONN conn, MQHOBJ obj, MQLONG selectorCount, MQLONG* selectors, MQLONG intAttrCount, MQLONG* intAttrs, MQLONG charAttrLength, MQCHAR* charAttrs, MQLONG* cc, MQLONG* rc);
/// Calls MQINQ. Doesn't throw an MQException.

void inq(MQHCONN conn, MQHOBJ obj, MQLONG selectorCount, PMQLONG selectors, MQLONG intAttrCount, PMQLONG intAttrs, MQLONG charAttrLength, PMQCHAR charAttrs);
void inq(MQHCONN conn, MQHOBJ obj, MQLONG selectorCount, MQLONG* selectors, MQLONG intAttrCount, MQLONG* intAttrs, MQLONG charAttrLength, MQCHAR* charAttrs);
/// Calls MQCLOSE. Can throw an MQException.

void inq(MQHCONN conn, MQHOBJ obj, const std::vector<int>& intSelectors, const std::map<int, int>& charSelectors, std::map<int, int>& intResult, std::map<int, std::string>& charResult);
/// Calls MQCLOSE. Can throw an MQException.

void cb(MQHCONN conn, MQLONG operation, MQCBD* callbackDesc, MQHOBJ obj, MQMD* md, MQGMO* gmo, MQLONG* cc, MQLONG* rc);
/// Calls MQCB. Doesn't throw an MQException.

void cb(MQHCONN conn, MQLONG operation, MQCBD* callbackDesc, MQHOBJ obj, MQMD* md, MQGMO* gmo);
/// Calls MQCB. Can throw an MQException.

void ctl(MQHCONN conn, MQLONG operation, MQCTLO* options, MQLONG* cc, MQLONG* rc);
/// Calls MQCTL. Doesn't throw an MQException.

void ctl(MQHCONN conn, MQLONG operation, MQCTLO* options);
/// Calls MQCTL. Can throw an MQException.

private:
Poco::SharedLibrary _dll;

Expand All @@ -145,7 +163,11 @@ class MQFunctions

InqFn _inqFn;

void trace(const std::string& subject, const std::string& function, PMQLONG cc, PMQLONG rc);
CbFn _cbFn;

CtlFn _ctlFn;

void trace(const std::string& subject, const std::string& function, MQLONG* cc, MQLONG* rc);
};

inline bool MQFunctions::isOk() const
Expand Down
Loading

0 comments on commit ec094dd

Please sign in to comment.