blob: e80d0d47f7a4626a4e7dd4b0a572b62643860ca3 [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 __ETCHPACKETIZER_H__
#define __ETCHPACKETIZER_H__
#include "capu/util/SmartPointer.h"
#include "transport/EtchSessionData.h"
#include "transport/EtchTransportPacket.h"
#include "transport/EtchSessionPacket.h"
#include "transport/EtchFlexBuffer.h"
#include "transport/EtchTransportData.h"
#include "util/EtchURL.h"
#include "util/EtchResources.h"
#include "common/EtchString.h"
class EtchRuntime;
/**
* Packetizes a stream data source. Reads a packet header:
* a 32-bit flag and a 32-bit length, both big-endian, verifies
* the flag, and then, using the length from the header,
* reads the packet data and passes it to the packet handler.
* As a packet source, accepts a packet and prepends a packet
* header to it before delivering it to a data source.
*/
class EtchPacketizer : public virtual EtchTransportPacket, public virtual EtchSessionData {
public:
/**
* The default maximum packet size that will be accepted, 16376 bytes.
*/
const static capu::int32_t& DEFAULT_MAX_PKT_SIZE();
const static EtchString& MAX_PKT_SIZE_TERM();
const static capu::int32_t& SIG();
const static capu::uint32_t& HEADER_SIZE();
/**
* Constructs the Packetizer with null packet handler and uri specified
* or defaulted maximum packet size.
* @param transport used to deliver data to the peer.
* @param uri
* @param resources
*/
EtchPacketizer(EtchTransportData* transport, EtchString& uri);
/**
* Constructs the Packetizer with null packet handler and uri specified
* or defaulted maximum packet size.
* @param transport used to deliver data to the peer.
* @param uri
* @param resources
*/
EtchPacketizer(EtchTransportData* transport, EtchURL* uri);
/**
* Destructor
*/
~EtchPacketizer();
/**
* @return the transport.
*/
EtchTransportData* getTransport();
/**
* Returns header size
*/
capu::int32_t getHeaderSize();
/**
* @see EtchSessionData
*/
status_t sessionData(capu::SmartPointer<EtchWho> sender, capu::SmartPointer<EtchFlexBuffer> buf);
/**
* @see EtchTransport
*/
status_t transportQuery(capu::SmartPointer<EtchObject> query, capu::SmartPointer<EtchObject> *result);
/**
* @see EtchTransport
*/
EtchSessionPacket* getSession();
/**
* @see EtchTransport
*/
void setSession(EtchSessionPacket* session);
/**
* @see EtchTransport
*/
status_t transportControl(capu::SmartPointer<EtchObject> control, capu::SmartPointer<EtchObject> value);
/**
* @see EtchTransport
*/
status_t transportNotify(capu::SmartPointer<EtchObject> event);
/**
* @see EtchTransportPacket
*/
status_t transportPacket(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchFlexBuffer> buf);
/**
* @see EtchSession
*/
status_t sessionQuery(capu::SmartPointer<EtchObject> query, capu::SmartPointer<EtchObject> &result);
/**
* @see EtchSession
*/
status_t sessionControl(capu::SmartPointer<EtchObject> control, capu::SmartPointer<EtchObject> value);
/**
* @see EtchSession
*/
status_t sessionNotify(capu::SmartPointer<EtchObject> event);
private:
EtchRuntime* mRuntime;
EtchTransportData* mTransport;
EtchSessionPacket* mSession;
capu::uint32_t mMaxPktSize;
capu::uint32_t mBodyLen;
capu::bool_t mWantHeader;
capu::SmartPointer<EtchFlexBuffer> mSavedBuf;
status_t processHeader(EtchFlexBuffer* buf, capu::bool_t reset, capu::uint32_t &pktSize);
};
#endif /* ETCHPACKETIZER_H */