//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project
//
//File: uniexceptions.h
//
//Version: $Revision: 1.2 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/10/13 16:08:00 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Jari Pusa
//
//Description:
//
//
//Copyright:
//
//
//Licence:
//
//
//History: 

#ifndef __UNI_UNIEXCEPTIONS_H__
#define __UNI_UNIEXCEPTIONS_H__

#include <typeinfo>
#include <string>

#include "pf/exception.h"

#include "unipdu.h"

class uniCoOrdProtocol;
class uniPdu;

class uniException : public pfException
{
    public:
        uniException(const uniException &other_);
        uniException(string file_, int line_);
        virtual ~uniException(void);

        virtual string getName(void) const;
};

//-----------------------------------------------------------------------

class uniEncodeFailedException : public uniException
{
    public:
        uniEncodeFailedException(const uniEncodeFailedException &other_);
        uniEncodeFailedException(string file_, int line_);
        virtual ~uniEncodeFailedException(void);

        virtual string getName(void) const;
};

class uniDiscardMessageException : public uniException
{
    public:
        uniDiscardMessageException(const uniDiscardMessageException &other_);
        uniDiscardMessageException(string file_, int line_);
        virtual ~uniDiscardMessageException(void);

        virtual string getName(void) const;
};

class uniDiscardIEException : public uniException
{
    public:
        uniDiscardIEException(const uniDiscardIEException &other_);
        uniDiscardIEException(string file_, int line_);
        virtual ~uniDiscardIEException(void);

        virtual string getName(void) const;
};

class uniIEFieldErrorException : public uniException
{
    public:
        uniIEFieldErrorException(const uniIEFieldErrorException &other_);
        uniIEFieldErrorException(string file_, int line_);
        uniIEFieldErrorException(string file_, int line_,
                                 uniPdu::IEType ieType_);
        virtual ~uniIEFieldErrorException(void);
        
        virtual string getName(void) const;

        void setType(uniPdu::IEType ieType_);
        uniPdu::IEType getType(void) const;

    private:
        uniPdu::IEType _ieType;
};

#endif // __UNI_UNIEXCEPTIONS_H__

