/*****************************************************************************

 @(#) $Id: SS7_Codec.H,v 1.3 2000/10/13 15:45:51 brian Exp $

 -----------------------------------------------------------------------------

 Copyright (C) 1997-2000  Brian Bidulock <bidulock@dallas.net>

 All Rights Reserved.

 This library is free software; you can redistribute it and/or modify it under
 the terms of the GNU Lesser General Public License as published by the Free
 Software Foundation; either version 2.1 of the License, or (at your option)
 any later version.
 
 This library is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 FOR A PARTICULAR PURPOSE.  See the GNU Lesser Public License for more
 details.
 
 You should have received a copy of the GNU Lesser General Public License
 along with this library; if not, write to the Free Software Foundation, Inc.,
 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 Last Modified $Date: 2000/10/13 15:45:51 $ by $Author: brian $

 -----------------------------------------------------------------------------

 $Log: SS7_Codec.H,v $
 Revision 1.3  2000/10/13 15:45:51  brian
 First public release.

 *****************************************************************************/

#ifndef __SS7_SS7_CODEC_H__
#define __SS7_SS7_CODEC_H__

#include "Codec.H"
#include <unistd.h>

class Codec_NULL : public Parameter {
    public:
        Codec_NULL(char*,char*);
    };

class Codec_SPAR1 : public Field { public: Codec_SPAR1(); };
class Codec_SPAR2 : public Field { public: Codec_SPAR2(); };
class Codec_SPAR3 : public Field { public: Codec_SPAR3(); };
class Codec_SPAR4 : public Field { public: Codec_SPAR4(); };
class Codec_SPAR5 : public Field { public: Codec_SPAR5(); };
class Codec_SPAR6 : public Field { public: Codec_SPAR6(); };
class Codec_SPAR7 : public Field { public: Codec_SPAR7(); };

class Codec_PC : public Parameter {
    public:
        Field*  MEM;
        Field*  CLS;
        Field*  NET;
        void report();
        Codec_PC(char*,char*,int,int,int,int);
        Codec_PC(char*,char*);
        bool set(int,int,int);
        bool get(int&,int&,int&);
        bool test(int,int,int);
    };

class Codec_NAI   : public Set { public: Codec_NAI  (); };
class Codec_OE    : public Set { public: Codec_OE   (); };
class Codec_NPLAN : public Set { public: Codec_NPLAN(); };

class Codec_ADDI  : public DigitString { public: Codec_ADDI (); };

class Codec_SSN : public Set {
    public:
        Codec_SSN(char*,char*);
    };

class Codec_CPA : public Parameter {
    public:
        Field*       PCI;
        Field*       SSNI;
        Field*       GTI;
        Set*         RI;
        Set*         NII;
        Bra*         PCI_B;
        Bra*         SSNI_B;
        Bra*         GTI_B;
        
        Codec_SSN*   SSN;
        Codec_PC*    SPC;
        ParameterG*  GT0;
        ParameterG*  GT1;
        ParameterG*  GT2;
        ParameterG*  GT3;
        ParameterG*  GT4;
        ParameterG*  GTX;
        Field*       TT;
        Set*         ES;
        Set*         NPLAN;
        Set*         NAI;
        Field*       NAI0;
        Set*         OE;
        DigitString* ADDI;
        Codec_NULL*  NOSSN;
        Codec_NULL*  NOSPC;
        Codec_CPA(char*,char*);
    };

class Codec_UREC : public Parameter {
    public:
        OctetString*    UREC;
        Codec_UREC(char*,char*);
    };

class Codec_OPARM : public ParameterPNL {
    public:
        Field*          PTR;
        Field*          PNAM;
        Field*          PL;
        Bra*            PNAM_B;
        Codec_OPARM(char*,char*,Codec**);
        Codec_OPARM(const Codec_OPARM&);
        Codec_OPARM* copy();
    };

#endif __SS7_SS7_CODEC_H__
