| 1 | #ifndef LowerTestAdapter_h |
|---|
| 2 | #define LowerTestAdapter_h |
|---|
| 3 | |
|---|
| 4 | #include <boost/algorithm/string.hpp> |
|---|
| 5 | #include <boost/shared_ptr.hpp> |
|---|
| 6 | |
|---|
| 7 | #include "Helper/Singleton.h" |
|---|
| 8 | #include "Helper/Socket.h" |
|---|
| 9 | #include "Helper/GeneralConfigurationParams.h" |
|---|
| 10 | #include "Helper/Exceptions.h" |
|---|
| 11 | #include "Ports/AdapterConfigPort.h" |
|---|
| 12 | #include "Ports/DataPort.h" |
|---|
| 13 | #include "Messages/TrafficCaptureMessage.h" |
|---|
| 14 | #include "Dispatcher/Filter.h" |
|---|
| 15 | |
|---|
| 16 | using namespace t3devlib; |
|---|
| 17 | |
|---|
| 18 | class LowerTestAdapter : public Singleton<LowerTestAdapter> |
|---|
| 19 | { |
|---|
| 20 | private: |
|---|
| 21 | //! Singleton pattern implementation. |
|---|
| 22 | friend class Singleton<LowerTestAdapter>; |
|---|
| 23 | |
|---|
| 24 | //! LowerTestAdapter. |
|---|
| 25 | /*! Default ctor. Shall be declared in private part due to Singleton pattern implementation. |
|---|
| 26 | */ |
|---|
| 27 | LowerTestAdapter(); |
|---|
| 28 | void SendMessage(TrafficCaptureMessage * pMsg); |
|---|
| 29 | |
|---|
| 30 | public: |
|---|
| 31 | ~LowerTestAdapter(); |
|---|
| 32 | /** Register Data port to Lower Test Adapter |
|---|
| 33 | * @param pPort: Pointer to Monitor port |
|---|
| 34 | */ |
|---|
| 35 | void RegisterDataPort(DataPort *pPort); |
|---|
| 36 | |
|---|
| 37 | /** Register AdapterConfigPort port to Lower Test Adapter |
|---|
| 38 | * @param pPort: Pointer to Adapter port |
|---|
| 39 | */ |
|---|
| 40 | void RegisterAdapterConfigPort(AdapterConfigPort *pPort); |
|---|
| 41 | |
|---|
| 42 | /** Register a filter for a component |
|---|
| 43 | * @param pComponent: Pointer to a ComponentId for which the filter is defined |
|---|
| 44 | * @param filter: Filter details |
|---|
| 45 | */ |
|---|
| 46 | void RegisterFilter(const ComponentId *pComponent, const FilterSet & filter); |
|---|
| 47 | |
|---|
| 48 | //! ConnectToCaptureServer |
|---|
| 49 | /*! Configure and connect to the TrafficCapture process |
|---|
| 50 | * @param sServerAddress: IP address to the TrafficCapture process (it acts as a sever) |
|---|
| 51 | * @param iServerPort: Port number |
|---|
| 52 | * @param filter: Global traffic capture filtering |
|---|
| 53 | * @param ifaces: Netwotrk interfaces to monitor |
|---|
| 54 | * @param mode: Traffic capture mode: on-line / off-line |
|---|
| 55 | * @param record: Indicate if the TrafficCapture process should record the traffic |
|---|
| 56 | * @param fileToPlay: In offline mode, this is the Pcap file name to play. It should be set to an empty string in real-line mode. |
|---|
| 57 | */ |
|---|
| 58 | void ConnectToCaptureServer(boost::shared_ptr<GeneralConfigurationParams> configParams) throw (LowerTestAdapterException); |
|---|
| 59 | //void ConnectToCaptureServer(const string& sServerAddress, const int iServerPort, const string& filter, const string& ifaces, unsigned char mode, unsigned char record, const string fileToPlay); |
|---|
| 60 | |
|---|
| 61 | //! ! StartCapture |
|---|
| 62 | /*! Start the traffic capture |
|---|
| 63 | */ |
|---|
| 64 | void StartCapture(); |
|---|
| 65 | |
|---|
| 66 | //! StopCapture |
|---|
| 67 | /*! Stop the traffic capture |
|---|
| 68 | */ |
|---|
| 69 | void StopCapture(); |
|---|
| 70 | |
|---|
| 71 | //! EnqueueMessage |
|---|
| 72 | /*! Enqueues captured data to the component data port |
|---|
| 73 | * @param pComp: pointer to the target component |
|---|
| 74 | * @param pData: pointer to a buffer containing captured data |
|---|
| 75 | * @param nDataLen: length of captured data (in bytes) |
|---|
| 76 | */ |
|---|
| 77 | void EnqueueMessage(const ComponentId * pComp, const unsigned char * pData, int nDataLen); |
|---|
| 78 | |
|---|
| 79 | private: |
|---|
| 80 | //! ! ProcessResponse |
|---|
| 81 | /*! Process the TrafficCapture response message result to send it to TTCN-3 script. |
|---|
| 82 | * @param result: result code |
|---|
| 83 | */ |
|---|
| 84 | void ProcessResponse(const std::string& message, bool result); |
|---|
| 85 | /* Main function for thread in charge of communication with |
|---|
| 86 | * TrafficCapture |
|---|
| 87 | */ |
|---|
| 88 | static void Run(); |
|---|
| 89 | |
|---|
| 90 | //! InitializeCapture |
|---|
| 91 | /*! Configure and connect to the TrafficCapture process |
|---|
| 92 | * @param filter: Global traffic capture filtering |
|---|
| 93 | * @param ifaces: Netwotrk interfaces to monitor |
|---|
| 94 | * @param mode: Traffic capture mode: on-line / off-line |
|---|
| 95 | * @param record: Indicate if the TrafficCapture process should record the traffic |
|---|
| 96 | * @param fileToPlay: In offline mode, this is the Pcap file name to play. It should be set to an empty string in real-line mode. |
|---|
| 97 | */ |
|---|
| 98 | void InitializeCapture(boost::shared_ptr<GeneralConfigurationParams> configParams) throw (LowerTestAdapterException); |
|---|
| 99 | //void InitializeCapture(const string& filter, const string& ifaces, unsigned char mode, unsigned char record, const string fileToPlay); |
|---|
| 100 | |
|---|
| 101 | /** This method is called whenever a captured packet is received |
|---|
| 102 | * from TrafficCapture. It dispatches the packet to Monitor port |
|---|
| 103 | * if associated filter matches. |
|---|
| 104 | * @param pCapturedData: Pointer to a buffer containing captured data |
|---|
| 105 | * @param nDataLen: Number of bytes in the buffer containing captured data |
|---|
| 106 | */ |
|---|
| 107 | void ProcessCapturedData(const unsigned char * pCaptureData, unsigned int nDataLen); |
|---|
| 108 | |
|---|
| 109 | Socket * m_captureSocket; |
|---|
| 110 | boost::thread * m_captureThread; |
|---|
| 111 | DataPort * m_dataPort; // created and deleted by t3dk |
|---|
| 112 | AdapterConfigPort * m_adapterConfigPort; // created and deleted by t3dk |
|---|
| 113 | ComponentFilter m_filter; |
|---|
| 114 | }; |
|---|
| 115 | |
|---|
| 116 | |
|---|
| 117 | #endif |
|---|