// --------------------------------------------------------------------
//       A k a . c p p
//                                                                     
//        Fido messages tracker                            
//        Aka support
// --------------------------------------------------------------------
//        Copyright (c) 1998-2000 by Fyodor Ustinov                         
//                                FIDONet 2:5020/79                      
//                                                                     
//        All rights reserved.                                         
// --------------------------------------------------------------------
#ifndef UNIX
#include <io.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "constant.hpp"
#include "help.hpp"
#include "utils.hpp"
#include "vars.hpp"
#include "configure.hpp"
#include "fidoaddr.h"
#include "scandir.hpp"
#include "ufmtypes.h"
#include "a_list.hpp"
#include "log.hpp"

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

class tAka {
public:
   FA _Addr;
   FA _Mask;
   tAka() { _Addr.Clean(); _Mask.Clean(); };
   ~tAka() { return; };
};

IndBiList<tAka> Aka;
// --------------------------------------------------------------------

void AddAka(FA &Addr, FA &Mask) {
tAka *a;

   Log.Level(LOGD) << "AddAka: " << Addr << " " << Mask << EOL;
   a = new tAka;
   a->_Addr = Addr;
   a->_Mask = Mask;
   Aka.AddToEnd(a);
}

FA &GetMyAka(FA const &Addr) {
IndBiList<tAka>::ElemPtr tmt;

   for (tmt = Aka.GetFirst(); tmt != NULL; tmt++) {
      if (tmt->_Mask == Addr) {
         return tmt->_Addr;
      }
   }   
   return MyAddr;
}

int IsMyAka(FA const &Addr) {
IndBiList<tAka>::ElemPtr tmt;

   for (tmt = Aka.GetFirst(); tmt != NULL; tmt++) { 
      if (tmt->_Addr == Addr) {
         return TRUE;
      }
   }   
   return (MyAddr == Addr);
}

int SetAka(FA &f, FA &m) {

   if (!f.Valid()) {
      yyerror("Invalid our addres.");
      return (-1);
   }
   if (f.Masked()) {
      yyerror("Our AKA Address should do not be a mask.");
      return (-1);
   }

   if (!m.Valid()) {
      yyerror("Invalid address.");
      return (-1);
   }
   AddAka(f,m);
   return(0);
}

void DestroyAka(void) {
   Aka.Clear();
}

// ---------------------------- END --------------------------------------


syntax highlighted by Code2HTML, v. 0.9.1