152 lines
4.9 KiB
C++
152 lines
4.9 KiB
C++
//----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) Intel Corporation, 2006 - 2007.
|
|
//
|
|
// File: TunnelConsumer.h
|
|
//
|
|
// Contents: Handles outgoing data on APF tunnel.
|
|
//
|
|
// Notes:
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef AMT_TUNNEL_CONSUMER_H
|
|
#define AMT_TUNNEL_CONSUMER_H
|
|
|
|
#include <ace/ACE.h>
|
|
#if !defined (ACE_LACKS_PRAGMA_ONCE)
|
|
# pragma once
|
|
#endif /* ACE_LACKS_PRAGMA_ONCE */
|
|
|
|
#include "APF.h"
|
|
#include <ace/Message_Block.h>
|
|
#include <ace/SOCK_Stream.h>
|
|
#include <ace/Recursive_Thread_Mutex.h>
|
|
|
|
// FW declaration
|
|
class AMT_Tunnel_Handler;
|
|
class AMT_Tunnel_Supplier;
|
|
class Channel_Consumer; // Remove
|
|
class Tcp_Consumer; // Remove
|
|
class Channel_Manager;
|
|
|
|
// ============================================================================
|
|
// = TITLE
|
|
// Handles outgoing APF packet from SOCKS/tunnel supplier to Intel(R) AMT.
|
|
//
|
|
// = DESCRIPTION
|
|
// Handle outgoing APF messages, reformat messages to APF style.
|
|
// This consumer must outlive all suppliers that have reference to it,
|
|
// i.e. it's AMT_Tunnel_Supplier and any Channel_Consumer.
|
|
// ============================================================================
|
|
class AMT_Tunnel_Consumer
|
|
{
|
|
friend class AMT_Tunnel_Supplier;
|
|
friend class AMT_Tunnel_Handler;
|
|
public:
|
|
// = Initialization method.
|
|
AMT_Tunnel_Consumer (AMT_Tunnel_Handler *tunnel_handler);
|
|
|
|
// = Destruction
|
|
virtual ~AMT_Tunnel_Consumer(void);
|
|
|
|
// Tunnel control messages (functions access by tunnel supplier)
|
|
STATUS send_APF_message (APF_BasicMessage &msg, PRIORITY prio=PRIO_LOW);
|
|
STATUS send_APF_message (ACE_UINT8 msg, PRIORITY prio=PRIO_LOW);
|
|
|
|
// Channel specific messages (functions access by channel consumer)
|
|
STATUS send_channel_open_request ( Channel_Consumer *channel_consumer,
|
|
Tcp_Consumer *tcp_consumer,
|
|
ACE_UINT32 connectedAddressStringLen,
|
|
ACE_CString connectedAddressString,
|
|
ACE_UINT32 connectedPort,
|
|
ACE_UINT32 originatorIpAddressLen,
|
|
ACE_CString originatorIpAddress,
|
|
ACE_UINT32 originatorPort);
|
|
|
|
STATUS send_channel_close ( ACE_UINT32 recipent_channel);
|
|
|
|
STATUS send_channel_data ( ACE_UINT32 recipent_channel,
|
|
ACE_Message_Block *data);
|
|
|
|
STATUS channelOpenDirectRep ( bool status,
|
|
ACE_INT32 amt_id,
|
|
Channel_Consumer *channel_consumer,
|
|
Tcp_Consumer *tcp_consumer,
|
|
ACE_INT32 mps_id= -1);
|
|
|
|
// Handle the outgoing message queue.
|
|
virtual STATUS handle_output();
|
|
|
|
// Handle close message from reactor
|
|
void handle_close();
|
|
|
|
// Put close message in my queue
|
|
STATUS hangup();
|
|
|
|
protected:
|
|
|
|
ACE_SOCK_Stream& getPeer(void) const;
|
|
Channel_Manager& channel_manager() const;
|
|
|
|
// This function remove all messages from queue and handles
|
|
// channel open request by replying with channel open failure.
|
|
void empty_queue();
|
|
|
|
// Put message in this tunnel handler queue and initiate write io.
|
|
STATUS putq_wrapper(ACE_Message_Block *mb, PRIORITY prio = PRIO_LOW, ACE_Time_Value *tv=0);
|
|
|
|
int tunnelState (void) const;
|
|
void tunnelState (int state);
|
|
|
|
STATUS send_data(ACE_Message_Block *mb);
|
|
// Handle internal messages
|
|
STATUS handle_channel_open_request (ACE_Message_Block *mb);
|
|
STATUS handle_channel_close (ACE_Message_Block *mb);
|
|
STATUS handle_channel_open_reply (ACE_Message_Block *mb);
|
|
|
|
virtual const char* identifier();
|
|
// ACE_Recursive_Thread_Mutex& socket_mutex();
|
|
private:
|
|
AMT_Tunnel_Handler* tunnel_handler_; // Reference to the tunnel Tunnel_Handler
|
|
ACE_UINT32 _msg_counter; //for debug purpose only
|
|
protected:
|
|
// Define internal messaging protocol
|
|
|
|
// Class for Channel_Open request
|
|
class Internal_Channel_Open_Msg : public ACE_Message_Block
|
|
{
|
|
public:
|
|
Internal_Channel_Open_Msg(): ACE_Message_Block(0,MB_CHANNEL_OPEN), channel_consumer(), tcp_consumer(),
|
|
connectedAddressStringLen(), connectedPort(), originatorIpAddressLen(), originatorPort(){};
|
|
Channel_Consumer *channel_consumer;
|
|
Tcp_Consumer *tcp_consumer;
|
|
ACE_UINT32 connectedAddressStringLen;
|
|
ACE_CString connectedAddressString;
|
|
ACE_UINT32 connectedPort;
|
|
ACE_UINT32 originatorIpAddressLen;
|
|
ACE_CString originatorIpAddress;
|
|
ACE_UINT32 originatorPort;
|
|
};
|
|
// Class for Channel_Close request
|
|
class Internal_Channel_Close_Msg : public ACE_Message_Block
|
|
{
|
|
public:
|
|
Internal_Channel_Close_Msg(): ACE_Message_Block(0,MB_CHANNEL_CLOSE), recipent_channel(){};
|
|
ACE_UINT32 recipent_channel;
|
|
};
|
|
// Class for Channel_Open_Reply
|
|
class Internal_Channel_Open_Reply_Msg : public ACE_Message_Block
|
|
{
|
|
public:
|
|
Internal_Channel_Open_Reply_Msg(): ACE_Message_Block(0,MB_CHANNEL_OPEN_REPLY), status(),
|
|
MPS_id(), AMT_id(), channel_consumer(), tcp_consumer(){};
|
|
bool status;
|
|
ACE_INT32 MPS_id;
|
|
ACE_INT32 AMT_id;
|
|
Channel_Consumer *channel_consumer;
|
|
Tcp_Consumer *tcp_consumer;
|
|
};
|
|
|
|
};
|
|
|
|
#endif // AMT_TUNNEL_CONSUMER_H
|