//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / SIG
//
//File: sigexceptions.h
//
//Version: $Revision: 1.4 $
//
//State: $State: Exp $
//
//Date: $Date: 1999/01/22 09:48:45 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Sami Raatikainen
//
//Description:
//
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//
//Licence:
//
//
//History: 

#ifndef __SIG_SIGEXCEPTIONS_H__
#define __SIG_SIGEXCEPTIONS_H__

#include <typeinfo>
#include <string>
#include "pf/exception.h"

class sigException : public pfException
{
    public:
        sigException(const sigException &other_);
        sigException(string file_, int line_);
        sigException(string file_, int line_, pfUlong type_);
        virtual ~sigException(void);
        
        virtual string getName(void) const;
        virtual pfUlong getCause(void) const;
        virtual pfUlong getType(void) const;
        
    protected:
        pfUlong _cause;
        pfUlong _type;
};

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

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

        virtual string getName(void) const;
};

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

class sigUnrecognizedIEException : public sigException
{
    public:
        sigUnrecognizedIEException(
            const sigUnrecognizedIEException &other_);
        sigUnrecognizedIEException(string file_, int line_, pfUlong type_);
        virtual ~sigUnrecognizedIEException(void);

        virtual string getName(void) const;
};

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

class sigMandatoryIEMissingException : public sigException
{
    public:
        sigMandatoryIEMissingException(
            const sigMandatoryIEMissingException &other_);
        sigMandatoryIEMissingException(string file_, int line_, pfUlong type_);
        virtual ~sigMandatoryIEMissingException(void);
        
        virtual string getName(void) const;
};

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

class sigMandatoryIEContentErrorException : public sigException
{
    public:
        sigMandatoryIEContentErrorException(
            const sigMandatoryIEContentErrorException &other_);
        sigMandatoryIEContentErrorException(
            string file_, int line_, pfUlong type_);
        virtual ~sigMandatoryIEContentErrorException(void);
        
        virtual string getName(void) const;
};

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

class sigNonMandatoryIEContentErrorException : public sigException
{
    public:
        sigNonMandatoryIEContentErrorException(
            const sigNonMandatoryIEContentErrorException &other_);
        sigNonMandatoryIEContentErrorException(
            string file_, int line_, pfUlong type_);
        virtual ~sigNonMandatoryIEContentErrorException(void);

        virtual string getName(void) const;
};

#endif // __SIG_SIGEXCEPTIONS_H__
