summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/client/IncomingMessage.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-04-13 20:58:27 +0000
committerAlan Conway <aconway@apache.org>2007-04-13 20:58:27 +0000
commit26a723475dc6926bde883c8c7f983ee44d8deb01 (patch)
treed3be63007fb9799549310ee31cfd1aae589bfd96 /qpid/cpp/src/client/IncomingMessage.cpp
parent52a1b1fbcaf2935874f8ab7b85a06d09eed4a94c (diff)
downloadqpid-python-26a723475dc6926bde883c8c7f983ee44d8deb01.tar.gz
Moved src/ source code to src/qpid directory:
- allows rhm package to build consistently against checked-out or installed qpid. - consistent correspondence between source paths and C++ namespaces. - consistent use of #include <qpid/foo> in source and by users. - allows header files to split over multiple directories, e.g. separating generated code, separating public API from private files. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@528668 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/client/IncomingMessage.cpp')
-rw-r--r--qpid/cpp/src/client/IncomingMessage.cpp168
1 files changed, 0 insertions, 168 deletions
diff --git a/qpid/cpp/src/client/IncomingMessage.cpp b/qpid/cpp/src/client/IncomingMessage.cpp
deleted file mode 100644
index eb5f2b6fae..0000000000
--- a/qpid/cpp/src/client/IncomingMessage.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-#include "IncomingMessage.h"
-#include "../Exception.h"
-#include "ClientMessage.h"
-#include <boost/format.hpp>
-
-namespace qpid {
-namespace client {
-
-using boost::format;
-using sys::Mutex;
-
-IncomingMessage::Destination::~Destination() {}
-
-
-IncomingMessage::WaitableDestination::WaitableDestination()
- : shutdownFlag(false) {}
-
-void IncomingMessage::WaitableDestination::message(const Message& msg) {
- Mutex::ScopedLock l(monitor);
- queue.push(msg);
- monitor.notify();
-}
-
-void IncomingMessage::WaitableDestination::empty() {
- Mutex::ScopedLock l(monitor);
- queue.push(Empty());
- monitor.notify();
-}
-
-bool IncomingMessage::WaitableDestination::wait(Message& msgOut) {
- Mutex::ScopedLock l(monitor);
- while (queue.empty() && !shutdownFlag)
- monitor.wait();
- if (shutdownFlag)
- return false;
- Message* msg = boost::get<Message>(&queue.front());
- bool success = msg;
- if (success)
- msgOut=*msg;
- queue.pop();
- if (!queue.empty())
- monitor.notify(); // Wake another waiter.
- return success;
-}
-
-void IncomingMessage::WaitableDestination::shutdown() {
- Mutex::ScopedLock l(monitor);
- shutdownFlag = true;
- monitor.notifyAll();
-}
-
-void IncomingMessage::openReference(const std::string& name) {
- Mutex::ScopedLock l(lock);
- if (references.find(name) != references.end())
- throw ConnectionException(
- 503, format("Attempt to open existing reference %s.") % name);
- references[name];
- return;
-}
-
-void IncomingMessage::appendReference(
- const std::string& name, const std::string& data)
-{
- Mutex::ScopedLock l(lock);
- getRefUnlocked(name).data += data;
-}
-
-Message& IncomingMessage::createMessage(
- const std::string& destination, const std::string& reference)
-{
- Mutex::ScopedLock l(lock);
- getDestUnlocked(destination); // Verify destination.
- Reference& ref = getRefUnlocked(reference);
- ref.messages.resize(ref.messages.size() +1);
- ref.messages.back().setDestination(destination);
- return ref.messages.back();
-}
-
-void IncomingMessage::closeReference(const std::string& name) {
- Reference refCopy;
- {
- Mutex::ScopedLock l(lock);
- refCopy = getRefUnlocked(name);
- references.erase(name);
- }
- for (std::vector<Message>::iterator i = refCopy.messages.begin();
- i != refCopy.messages.end();
- ++i)
- {
- i->setData(refCopy.data);
- // TODO aconway 2007-03-23: Thread safety,
- // can a destination be removed while we're doing this?
- getDestination(i->getDestination()).message(*i);
- }
-}
-
-
-void IncomingMessage::addDestination(std::string name, Destination& dest) {
- Mutex::ScopedLock l(lock);
- DestinationMap::iterator i = destinations.find(name);
- if (i == destinations.end())
- destinations[name]=&dest;
- else if (i->second != &dest)
- throw ConnectionException(
- 503, format("Destination already exists: %s.") % name);
-}
-
-void IncomingMessage::removeDestination(std::string name) {
- Mutex::ScopedLock l(lock);
- DestinationMap::iterator i = destinations.find(name);
- if (i == destinations.end())
- throw ConnectionException(
- 503, format("No such destination: %s.") % name);
- destinations.erase(i);
-}
-
-IncomingMessage::Destination& IncomingMessage::getDestination(
- const std::string& name) {
- return getDestUnlocked(name);
-}
-
-IncomingMessage::Reference& IncomingMessage::getReference(
- const std::string& name) {
- return getRefUnlocked(name);
-}
-
-IncomingMessage::Reference& IncomingMessage::getRefUnlocked(
- const std::string& name) {
- Mutex::ScopedLock l(lock);
- ReferenceMap::iterator i = references.find(name);
- if (i == references.end())
- throw ConnectionException(
- 503, format("No such reference: %s.") % name);
- return i->second;
-}
-
-IncomingMessage::Destination& IncomingMessage::getDestUnlocked(
- const std::string& name) {
- Mutex::ScopedLock l(lock);
- DestinationMap::iterator i = destinations.find(name);
- if (i == destinations.end())
- throw ConnectionException(
- 503, format("No such destination: %s.") % name);
- return *i->second;
-}
-
-}} // namespace qpid::client