blob: 558bc117c8c3acbf48dd87dd9091faca6cae8b68 [file] [log] [blame]
/* $Id$
*
* 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.
*/
#ifndef __ETCHTCPTRANSPORTFACTORY_H__
#define __ETCHTCPTRANSPORTFACTORY_H__
#include "common/EtchString.h"
#include "common/EtchConfig.h"
#include "support/EtchServerFactory.h"
#include "support/EtchStack.h"
#include "transport/EtchTransportMessage.h"
#include "transport/EtchTransportData.h"
#include "transport/EtchTransportPacket.h"
#include "transport/EtchPacketizer.h"
#include "transport/EtchTcpConnection.h"
#include "transport/EtchTcpListener.h"
#include "transport/EtchMessagizer.h"
#include "transport/EtchTransportFactory.h"
#include "util/EtchResources.h"
class EtchTcpTransportFactory
: public EtchTransportFactory {
public:
friend class MySessionListener;
/**
* Constructor
* @param runtime
*/
EtchTcpTransportFactory(EtchRuntime* runtime);
/**
* Constructor
* @param runtime
* @param secure indicates whether the connection should be secured by SSL or not
*/
EtchTcpTransportFactory(EtchRuntime* runtime, capu::bool_t secure);
/**
* Destructor
*/
virtual ~EtchTcpTransportFactory();
/**
* @see EtchTransportFactory
*/
status_t newTransport(EtchString uri, EtchResources* resources, EtchTransportMessage*& result);
/**
* @see EtchTransportFactory
*/
status_t newListener(EtchString uri, EtchResources* resources, EtchTransport<EtchServerFactory>*& result);
private:
static const EtchString& SOCKET();
EtchRuntime* mRuntime;
const capu::bool_t mIsSecure;
class MySessionListener : public EtchTransport<EtchServerFactory>, public EtchSessionListener<EtchSocket> {
public:
/**
* Creates a new Session Listener
* @param runtime
* @param transport
* @param uri
* @param resources
*/
MySessionListener(EtchRuntime* runtime, EtchTcpTransportFactory* factory, EtchTransport<EtchSessionListener<EtchSocket> > *transport,
EtchString uri, EtchResources* resources, capu::bool_t secure);
/**
* Destructor
*/
virtual ~MySessionListener();
/**
* @see EtchTransport
*/
EtchServerFactory* getSession();
/**
* @see EtchTransport
*/
void setSession(EtchServerFactory* session);
/**
* @see EtchTransport
*/
status_t transportQuery(capu::SmartPointer<EtchObject> query, capu::SmartPointer<EtchObject> *result);
/**
* @see EtchTransport
*/
status_t transportControl(capu::SmartPointer<EtchObject> control, capu::SmartPointer<EtchObject> value);
/**
* @see EtchTransport
*/
status_t transportNotify(capu::SmartPointer<EtchObject> event);
/**
* @see EtchSessionListener
*/
status_t sessionAccepted(EtchSocket* connection);
/**
* @see EtchSessionListener
*/
status_t sessionQuery(capu::SmartPointer<EtchObject> query, capu::SmartPointer<EtchObject> &result);
/**
* @see EtchSessionListener
*/
status_t sessionControl(capu::SmartPointer<EtchObject> control, capu::SmartPointer<EtchObject> value);
/**
* @see EtchSessionListener
*/
status_t sessionNotify(capu::SmartPointer<EtchObject> event);
private:
EtchRuntime* mRuntime;
EtchTcpTransportFactory* mFactory;
EtchTransport<EtchSessionListener<EtchSocket> > *mTransport;
EtchString mUri;
EtchResources* mResources;
capu::bool_t mIsSecure;
EtchServerFactory* mSession;
capu::List<EtchStack*>* mConnectionStacks;
};
};
#endif