+++ /dev/null
-/*
- * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
- *
- * The contents of this file constitute Original Code as defined in and are
- * subject to the Apple Public Source License Version 1.2 (the 'License').
- * You may not use this file except in compliance with the License. Please obtain
- * a copy of the License at http://www.apple.com/publicsource and read it before
- * using this file.
- *
- * This Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
- * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
- * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
- * specific language governing rights and limitations under the License.
- */
-
-
-//
-// chooser - Protocol repository and Transfer maker for network protocols
-//
-#include "networkchooser.h"
-
-
-namespace Security {
-namespace Network {
-
-
-Chooser::Chooser(Manager &mgr) : manager(mgr)
-{
-}
-
-Chooser::~Chooser()
-{
-}
-
-
-//
-// Add, remove, and locate primary Protocols by name.
-//
-void Chooser::add(Protocol *protocol)
-{
- //@@@ locking
- Protocol * &proto = mCoreProtocols[protocol->urlPrefix()];
- assert(proto == NULL);
- proto = protocol;
-}
-
-void Chooser::remove(Protocol *protocol)
-{
- ProtoMap::iterator it = mCoreProtocols.find(protocol->urlPrefix());
- assert(it != mCoreProtocols.end());
- mCoreProtocols.erase(it);
-}
-
-Protocol &Chooser::protocolFor(const char *protoName) const
-{
- ProtoMap::const_iterator it = mCoreProtocols.find(protoName);
- if (it == mCoreProtocols.end())
- UnixError::throwMe(ENOENT);
- return *it->second;
-}
-
-
-//
-// The default implementation of protocolFor just finds a direct-connection Protocol
-// for the target's scheme.
-//
-Protocol &Chooser::protocolFor(const HostTarget &target) const
-{
- return protocolFor(target.scheme());
-}
-
-
-//
-// Here is a short-cut makeTransfer method.
-// It simply determines the proper Protocol, creates a Transfer from it, and adds it
-// to the Manager.
-//
-Transfer *Chooser::makeTransfer(const Target &target, Operation operation)
-{
- Protocol &protocol = protocolFor(target);
- //@@@ use auto_ptr here?
- Transfer *transfer = protocol.makeTransfer(target, operation);
- manager.add(transfer);
- return transfer;
-}
-
-
-} // end namespace Network
-} // end namespace Security