Structure of the language (Caronte Pcode Language)
In the software Caronte Antispam v2, exists four "enviroment of developement":
Every enviroment of developement ,in "Carontese P.L.", inherits class settings predefined in common with other enviroments, but develops also its own operating characteristics, visible only in that enviroment.
The enviroments at RUN TIME have defined contexts and their initialization is done by creating an instance of environment:
// ENV ANTISPAM
CS_ANTISPAM_SCRIPT this = new CS_ANTISPAM_SCRIPT($_this);
//ENV ADMIN
CS_ADMIN_SCRIPT this = new CS_ADMIN_SCRIPT($_this);
//ENV CRON
CS_CRON_SCRIPT this = new CS_CRON_SCRIPT($_this);
// ENV WEB
CS_WEB_SCRIPT this = new CS_WEB_SCRIPT($_this);
The instance of enviroment can be initialized only if the script is ,clearly, inside the context of that enviroment, for a pratical example it is not possible to initialize a WEB script inside the enviroment CS_ANTISPAM_SCRIPT or other enviroment that is outside the WEB context.
Every context of instance is generated automatically from “Core di Caronte Antispam v2”, inserting the relative pointer in the special variable “$_this”.
This , once initialized with the "new" operator, generates the enviroment instance, where it's possible to work , calling the base class functions or the context functions.
Before enter in the heart of programming, is right for us explain the mechanisms that trigger when a script runs, which basically are three stages:
“PRE-COMPILE”. (precompiler before run-time)
Is analyzed the syntax of the source, the ESCAPE sequences, and executed the MACRO functions as:
#ifdef
#ifndef
#else
#endif
#undef
#include
#import
“COMPILE STACK”.
Is compiled the source code in Pcode, doing the STACK , analysing the basic instructions as:
if () {} else {}
while () {}
do {} while ()
for () {}
continue
break
return
new
delete
sin
asin
cos
acos
tan
atan
log
exp
sqrt
rsq
rcp
fabs
rand
pow
floor
“RUN TIME”
The script is executed, processing the STACK.
In every phase of the mechanism is possible to receive syntax error, compilation error or run time error.
The script in case of errors stops its own work at any phase it is and also the enviroment linked to it stops working raising exceptions.
Every enviroment has event functions "raised" at RUN TIME from Caronte Antispam.
The events change according to the enviroment and are "raised" if exist in source code.
OnStartClientConnection(int [id_connection]);
OnClientTimeOut();
OverWriteCommandError(int [count num error]);
OnAuthenticatedToMTA();
OnReplyMTA(string [command from MTA server]);
OnAllClientData( string [command from client email]);
OnHelo(string [greeting],string [type]);
OnMailFrom(string [mail from]);
OnRcptToError(string [rpct considerato errore]);
OnCommandNOOP();
OnCommandRSET();
OnCommandData(int [buffer length]);
OnAllDataMessage(string [buffer message], int [1 this is the end]);
OnEmailMessagesToAnalyzer();
OnDoneAntispamFilter();
OnDestroyThis();
string this->Format(string,...);
void this->Exit();
void this->Print(string,...);
string this->SubStr(string,int,int);
string this->Trim(string);
string this->TrimLeft(string);
string this->TrimRight(string);
string this->TrimInternal(string);
string this->Lc(string);
string this->Uc(string);
string this->Split(string, char, int);
string this->Replace(string,string,string);
int this->StrLen(string);
char this->Chr(int);
in this->Ord(char);
float this->CharToFloat(string)
int this->CharToInt(string);
string this->FloatToChar(float)
string this->IntToChar(int);
in this->FloatToInt(float)
float this->IntToFloat(int)
int this->CompareStringNoCase(string, string);
string this->Encode64(string)
string this->Decode64(string);
string this->MD5(string);
string this->MD5File(string,string,int);
void this->MD5StartStream(void);
void this->MD5UpdateStreamB(pointer,int)
void this->MD5UpdateStream(string)
string this->MD5FinalStream(void);
string this->DecodeHtmlSpecialChar(string);
string this->EncodeHtmlSpecialChar(string);
string this->DeOfuscate(string);
string this->HtmlToText(string);
string this->URLDecode(string);
string this->URLEncode(string);
int this->HextoInt(string);
int this->Time(void);
string this->DateTimeFormat(string,int)
int this->GetTickCount(void)
void this->Sleep(int);
int this->REeq(string,string,int);
string $1();
string $2();
string $3();
string $4();
string $5();
void this->WriteLog(int,string,string);
string this->GetConfig(string,string):
int this->GetConfigToArray(class HashArray,string)
void this->SetConfig(string,string,string);
void this->DeleteFromConfig(string,string,string);
void this->WaitForReplaceConfig(void);
void this->SaveConfig(void);
float this->DNSBL_Score(string);
string this->DNSBL_Ns(string);
string this->DNS_Reverse(string);
string this->DNS_Resolve(string);
string this->DNS_MX(string)
string this->DNS_NS(string);
string this->DNS_TXT(string);
void this->SetLevelReBootConfig(int);
void this->SetRebootConfig(int);
string this->GetClientIP(void);
string this->GetClientReverseDns(void);
int this->IsAllowIpAdmin(string);
int this->InsertDomain(string);
CDomainConf this->GetDomain(string);
int this->DeleteDomain(string);
CDB_Ram this->GetDBRamDomains(void);
void this->SaveDomains();
void this->LoadDomainsConfig(void);
void this->AddVarToDomainTemplate(string,string,string);
void this->DeleteVarFromDomainTemplate(string,string);
CDB_Ram this->GetDBRamSpamTrap();
CDB_Ram this->GetDBRamIpInferno();
CDB_Ram this->GetDBRamHelo();
CS_RulesDB this->GetRulesDB();
bool this->SetHeloRefresh();
CS_Bayes this->GetDBBayes();
int this->ViewGreyListDB(HashArray, int,int,string,int)
int this->ViewALWLDB(HashArray,int,int,string,int);
void this->AddALWL(string,string);
int this->IsALWL(string,string);
void this->LoadALWL();
int this->DCTest(string);
int this->DCRefreshServer();
void this->DCGetServer(HashArray);
void this->ViewPhishingDB(HashArray);
int this->AddDomainPhishing(string);
int this->UpDateDomainPhishing(string,string);
int this->DeleteDomainPhishing(string);
int this->UpDateDBPhishingFromWWW();
void this->LoadDBPhishing();
string this->GetDBPhishingDate()
int this->RunScript(string)
class CAdminRequest {
void CAdminRequest();
int GetCmd();
int GetRecordCount();
int GetColCount();
void Reset();
HashArry GetRow();
};
class
CAdminResponse {
void CAdminResponse();
int GetRecordCount();
int GetColCount();
void Reset();
void Addnew();
void SetFieldAt(string,int);
void SetFieldBinaryAt(int, pointer,int);
int Send(int,int);
} ;
pointer this->GetPersistentOBJ(string,string);
pointer this->CreatePersistentOBJ(string,string);
void this->DeletePersistentOBJ(string);
void this->AddALWL(string,string);
int this->IsALWL(string,string);
int this->ViewALWLDB(HashArray ,int,int,string,int);
void this->StatisticValue(string,int,int,float,int);
int this->IsForgetHelo(string);
int this->SPFQuery(string,string,string);
string this->SPFResultString(int);
int this->GetErrorCountRFC();
void this->SetErrorCountRFC(int);
int this->IsLocalDomainByRCPT_TO(string);
int this->IsWhiteBlackList(string,string);
int this->IsSpamLover(string,string);
int this->GetSessionProperty();
void this->RegisterSessionProperty();
float this->RecalculatingScoreByUser(float,float,string);
int this->IsSpamTrap(string);
string this->GetSpamTrapResponse();
int this->IsValidKeyDanteCommunity();
void this->DanteCommunityAnnunce(string,string,string);
float this->DanteCommunityQuery(string,string,string);
string this->DanteCommunityGetEnumStringFormScore(float);
Int this->IsWhiteIpGreyList(string);
string this->PrepareTriplesGreyList(string,string,string,string,string);
int this->PassGreyList(string);
int this->GetForgedCountGreyList(string);
void this->ResetForgedCountGreyList(string);
void this->AddToGreyList(string);
int this->ViewGreyListDB(HashArray,int,int,string,int);
int this->BayesianCheck(string);
void this->AddToBayesianQuarantine(string,string,int, CS_ParseMail );
int this->IsPhishing(CS_ParseMail)
string this->GetFakePhishingDomain();
string this->GetEmailBody();
string this->GetEmailHeader();
string this->GetEmailSubject();
string this->GetEmailMailFrom();
string this->GetEmailMailTo();
string this->GetEmailMailTo();
string this->GetEmailContentType();
string this->GetEmailRaw();
int this->GetEmailAttachmentCount();
int this->GetEmailLen();
string this->GetEmailAttachmentBuffer(int);
string this->GetEmailAttachmentContentType(int);
float this->RegularExpressionCheck(CS_ParseMail = 0, CS_RulesResult = 0)
pointer this->GetPersistentOBJ(string,string);
pointer this->CreatePersistentOBJ(string,string);
void this->DeletePersistentOBJ(string);
void this->WriteHeaderMessage(string);
void this->ModifyHeaderSubject(string);
pointer this->GetPersistentOBJ(string,string);
pointer this->CreatePersistentOBJ(string,string);
void this->DeletePersistentOBJ(string);
CLASS CDB_Ram
void CDB_Ram();
bool Open(string);
bool Load();
int Query(string, HashArray ,int,int);
int Insert(string,string,int);
int Update(string,string);
int Delete(string);
int GetCount();
int Save();
void Reset();
int Close();
CLASS CS_ParseMail
void CS_ParseMail();
void AddStreaming(string);
string GetBody();
string GetHeader();
string GetSubject();
string GetRawEmail();
string GetMailFrom();
string GetMailTo();
string GetContentTransferEncoding();
string GetCharset();
string GetContentType();
int GetAttachmentCount();
int GetLen();
int Parse();
string GetAttachmentBuffer(int);
string GetAttachmentContentType(int);
string GetAttachmentContentTransferEncoding(int);
string GetAttachmentCharset(int);
int LoadMail(string);
int LoadFromFile(string);
CLASS CS_BayesWord
void CS_BayesWord();
int Elaborate(CS_ParseMail)
CLASS CS_Bayes
void CS_Bayes();
void SetMinOccurrences(float);
void PopolateDB(CS_BayesWord,int);
voit RemoveNeutral(int);
int AddQuarantine(CS_ParseMail,string,string,int,CS_Statistic);
CDB_Ram GetDBRam(string);
int GetWordsCount(string);
int IsSpam(CS_BayesWord, HashArray );
void Load();
CLASS XMLChild
void XMLChild();
bool AddValue(string,string);
string GetValue(string);
int GetCount();
CLASS XMLParse
void XMLParse();
int LoadFile(string,string,string);
void SetMaxChild(int);
void SetStreamingTimeOut(int);
void SetPartSeek(int);
int GetCountChild();
XMLChild GetChild(int);
CLASS CaronteServerConn
void CaronteServerConn(string,string,string);
void SetOptions(string,string,string);
int Connect();
bool IsConnected();
void Disconnect();
void SetTimeOut(int);
CLASS CaronteRecordSet
void CaronteRecordSet(CaronteServerConn);
void AddNew();
void SetFieldAt(int,string);
void SetFieldBinaryAt(int,pointer,int);
bool Query(int);
void Reset();
HashArray GetRow();
int GetLastError();
int RecordCount();
int ColCount();
CLASS CDomainConf
void CDomainConf();
void WaitForSession();
void StartSession();
void EndSession();
string GetVar(string);
void SetVar(string,string);
string GetDomainName();
CDB_Ram GetDBRam(string);
void Save();
void Delete();
CLASS CS_RulesResult
void CS_RulesResult();
int GetRulesCount();
string GetRulesName(int);
string GetRulesRE(int)
float GetRulesScore(int);
CLASS CS_RulesDB
void CS_RulesDB();
bool Open(string);
bool Load();
bool Save();
int AddRule(string,string,int,float,int);
void ViewRules(HashArray);
string RuleTest(CS_ParseMail,string,int,int,HashArray);
bool DeleteRule(string);
float RegularExpressionCheck(CS:PArseMail,Cs_RulesResult);
CLASS CNetInfo
void CNetInfo();
int BuildNetInfo(HashArray);
CLASS CS_Dns
void CS_Dns();
string DNS_Reverse(string);
string DNS_Resolve(string);
string DNS_MX(string);
string DNS_NS(string),
string DNS_TXT(string);
void AddNameServerDNS(string);
void SetTimeOut(int);
CLASS CS_Buffer
void CS_Buffer();
void Allocate(int);
int GetLen();
string ToString();
void Write(string,int);
CS_buffer GetBuffer();
pointer GetPointer();
string GetAt(int);
CLASS CS_Socket
void CS_Socket(int);
int IsOpen();
void Close();
int ConnectTo(string,string,string);
int Send(string,int,int);
int SendB(pointer,int,int);
int Riceve(CS_Buffer,int);
CLASS CS_FileSystem
void CS_FileSystem();
int UnLink(string);
int FileExists(string);
int DirExists(string);
int CopyFile(string,string,int);
int ReadDir(string,HashArray);
int FileSize(string);
int Exec(string);
string AppPath();
CLASS CS_File
void CS_File();
bool Open(string,int);
void WriteB(pointer,int);
void Write(string,int);
int Read(CS_Buffer);
int Seek(int,int);
void Flush();
void Close();
CLASS CS_MemoryFile
void CS_MemoryFile(int);
void Close();
void Flush();
int Read(CS_Buffer);
void Write(string,int);
void WriteB(pointer,int);
string ToString(),
pointer GetPointer();
int GetLength();
CLASS CS_Statistic
void CS_Statistic();
void AddItem(string,int,int,float,int);
void Reset();
int Load(string);
int Save();
void PopulatedArray(HashArray);
CLASS CS_HttpClient
void CS_HttpClient();
int SendRequest(int,string,string);
string GetHeader();
string GetResult();
void SetTimeOut(int);
void SetAgentName(string);
void SetMaxBufferLen(int);
void SetIPAdatper(string);
CLASS CS_MySqlConn
void CS_MySqlConn();
int Connect(string,string,string,string,int);
void Close();
int State();
void Execute(string);
string GetError();
CLASS CS_MySqlRecordSet
void CS_MySqlRecordSet();
int Open(string,CS_MySqlConn);
void Close();
int RecordCount();
HashArray FetchRow();
CLASS CS_FileCfg
void CS_FileCfg();
int Load(string);
bool LoadByString(string);
boll Save(string);
string ReadVar(string,string);
void WriteVar(string,string,string);
int IsKeyExist(string,string);
void DeleteKey(string,string);
int GetConfigToArray(HashArray);
CLASS CS_Flag
void CS_Flag();
void SetFloat(float);
void SetInt(int);
void SetBool(bool);
void SetString(string);
float GetFloat();
int GetInt();
bool GetBool();
string GetString()