/*
 * ----------------------------------------------------------------
 * Night Light IRC Proxy - Connection Header
 * ----------------------------------------------------------------
 * Copyright (C) 1997-2007 Jonas Kvinge <jonas@night-light.net>
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Last modified by:
 * Jonas Kvinge (24.11.2007)
 *
 */

#ifdef CONN_H
#warning "conn.h already included."
#else
#define CONN_H

struct in_addr;
#if IPV6_SUPPORT
struct in6_addr;
#endif
struct Who_Struct;
struct IRC_ISupport_Struct;
struct ConnConf_Struct;

/* DEFINES - JONAS (24.06.2000) */

#define CONN_INTERVAL					120
#define CONN_SOCKKEEPALIVEOPT				TRUE
#define CONN_CONNECTTIMEOUT				120
#define CONN_QUITTIMEOUT				5
#define CONN_IDLETIMEBEFOREPING				30
#define CONN_PINGTIMEOUT				1800
#define CONN_ISONTIME					30
#define CONN_IGNORENICKMASK				6
#define CONN_IGNOREUSERMASK				6
#define CONN_IGNOREHOSTMASK				1
#define CONN_IGNOREEXPIRETIME				30
#define CONN_IGNORETTL					10
#define CHAN_HASHSIZE					100
#define CHANUSER_HASHSIZE				10000

/* BIT MASKS - JONAS (24.06.2000) */

#define CONN_BITMASK_ATTACHED				1
#define CONN_BITMASK_REMOVE				2
#define CONN_BITMASK_LOGHOMEDIR				4
#define CONN_BITMASK_LOGERROR				8

#define CONN_BITMASK_CONNECTPROC			1
#define CONN_BITMASK_SOCKET				2
#define CONN_BITMASK_SOCKOPT				4
#define CONN_BITMASK_KEEPALIVEOPT			8
#define CONN_BITMASK_BOUND				16
#define CONN_BITMASK_CONNECTING				32
#define CONN_BITMASK_CONNECTED				64
#define CONN_BITMASK_SOCKNAME				128
#define CONN_BITMASK_PEERNAME				256
#define CONN_BITMASK_SSLHANDSHAKE			512
#define CONN_BITMASK_WELCOME				1024
#define CONN_BITMASK_AWAY				2048
#define CONN_BITMASK_SENTNICK				4096
#define CONN_BITMASK_SENTAWAYNICK			8192
#define CONN_BITMASK_SENTPING				16384
#define CONN_BITMASK_SENTISON				32768
#define CONN_BITMASK_SENTQUIT				65536
#define CONN_BITMASK_AWAYNICK				131072


#define CONN_USERMODE_INVISIBLE				1
#define CONN_USERMODE_NOTICE				2
#define CONN_USERMODE_WALLOPS				4
#define CONN_USERMODE_GOPER				8
#define CONN_USERMODE_LOPER				16

#define CONN_CHANMODE_ANONYMOUS				1
#define CONN_CHANMODE_INVITEONLY			2
#define CONN_CHANMODE_MODERATED				4
#define CONN_CHANMODE_NOOUTSIDE				8
#define CONN_CHANMODE_QUIET				16
#define CONN_CHANMODE_PRIVATE				32
#define CONN_CHANMODE_SECRET				64
#define CONN_CHANMODE_REOP				128
#define CONN_CHANMODE_ONLYOPTOPIC			256
#define CONN_CHANMODE_KEY				512
#define CONN_CHANMODE_LIMIT				1024

#define CONN_CHANLISTMODE_BAN				1
#define CONN_CHANLISTMODE_EXCEPTION			2
#define CONN_CHANLISTMODE_INVITATION			4

#define CONN_CHANUSERMODE_CREATOR			1
#define CONN_CHANUSERMODE_OPERATOR			2
#define CONN_CHANUSERMODE_VOICE				4

/* MACROS - JONAS (24.06.2000) */

#define Conn_SetAttached(x)				((x)->Flags |= CONN_BITMASK_ATTACHED)
#define Conn_SetRemove(x)				((x)->Flags |= CONN_BITMASK_REMOVE)
#define Conn_SetLogHomeDir(x)				((x)->Flags |= CONN_BITMASK_LOGHOMEDIR)
#define Conn_SetLogError(x)				((x)->Flags |= CONN_BITMASK_LOGERROR)

#define Conn_ClearAttached(x)				((x)->Flags &= ~CONN_BITMASK_ATTACHED)
#define Conn_ClearRemove(x)				((x)->Flags &= ~CONN_BITMASK_REMOVE)
#define Conn_ClearLogHomeDir(x)				((x)->Flags &= ~CONN_BITMASK_LOGHOMEDIR)
#define Conn_ClearLogError(x)				((x)->Flags &= ~CONN_BITMASK_LOGERROR)

#define Conn_IsAttached(x)				((x)->Flags & CONN_BITMASK_ATTACHED)
#define Conn_IsRemove(x)				((x)->Flags & CONN_BITMASK_REMOVE)
#define Conn_IsLogHomeDir(x)				((x)->Flags & CONN_BITMASK_LOGHOMEDIR)
#define Conn_IsLogError(x)				((x)->Flags & CONN_BITMASK_LOGERROR)


#define Conn_SetConnectProc(x)				((x)->ConnectionFlags |= CONN_BITMASK_CONNECTPROC)
#define Conn_SetSocket(x)				((x)->ConnectionFlags |= CONN_BITMASK_SOCKET)
#define Conn_SetSockOPT(x)				((x)->ConnectionFlags |= CONN_BITMASK_SOCKOPT)
#define Conn_SetKeepAliveOPT(x)				((x)->ConnectionFlags |= CONN_BITMASK_KEEPALIVEOPT)
#define Conn_SetBound(x)				((x)->ConnectionFlags |= CONN_BITMASK_BOUND)
#define Conn_SetConnecting(x)				((x)->ConnectionFlags |= CONN_BITMASK_CONNECTING)
#define Conn_SetConnected(x)				((x)->ConnectionFlags |= CONN_BITMASK_CONNECTED)
#define Conn_SetSockName(x)				((x)->ConnectionFlags |= CONN_BITMASK_SOCKNAME)
#define Conn_SetPeerName(x)				((x)->ConnectionFlags |= CONN_BITMASK_PEERNAME)
#define Conn_SetSSLHandshake(x)				((x)->ConnectionFlags |= CONN_BITMASK_SSLHANDSHAKE)
#define Conn_SetWelcome(x)				((x)->ConnectionFlags |= CONN_BITMASK_WELCOME)
#define Conn_SetAway(x)					((x)->ConnectionFlags |= CONN_BITMASK_AWAY)
#define Conn_SetSentNick(x)				((x)->ConnectionFlags |= CONN_BITMASK_SENTNICK)
#define Conn_SetSentAwayNick(x)				((x)->ConnectionFlags |= CONN_BITMASK_SENTAWAYNICK)
#define Conn_SetSentPing(x)				((x)->ConnectionFlags |= CONN_BITMASK_SENTPING)
#define Conn_SetSentISON(x)				((x)->ConnectionFlags |= CONN_BITMASK_SENTISON)
#define Conn_SetSentQuit(x)				((x)->ConnectionFlags |= CONN_BITMASK_SENTQUIT)
#define Conn_SetAwayNick(x)				((x)->ConnectionFlags |= CONN_BITMASK_AWAYNICK)

#define Conn_ClearConnectProc(x)			((x)->ConnectionFlags &= ~CONN_BITMASK_CONNECTPROC)
#define Conn_ClearSocket(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_SOCKET)
#define Conn_ClearSockOPT(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_SOCKOPT)
#define Conn_ClearKeepAliveOPT(x)			((x)->ConnectionFlags &= ~CONN_BITMASK_KEEPALIVEOPT)
#define Conn_ClearBound(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_BOUND)
#define Conn_ClearConnecting(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_CONNECTING)
#define Conn_ClearConnected(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_CONNECTED)
#define Conn_ClearSockName(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_SOCKNAME)
#define Conn_ClearPeerName(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_PEERNAME)
#define Conn_ClearSSLHandshake(x)			((x)->ConnectionFlags &= ~CONN_BITMASK_SSLHANDSHAKE)
#define Conn_ClearWelcome(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_WELCOME)
#define Conn_ClearAway(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_AWAY)
#define Conn_ClearSentNick(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_SENTNICK)
#define Conn_ClearSentAwayNick(x)			((x)->ConnectionFlags &= ~CONN_BITMASK_SENTAWAYNICK)
#define Conn_ClearSentPing(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_SENTPING)
#define Conn_ClearSentISON(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_SENTISON)
#define Conn_ClearSentQuit(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_SENTQUIT)
#define Conn_ClearAwayNick(x)				((x)->ConnectionFlags &= ~CONN_BITMASK_AWAYNICK)

#define Conn_IsConnectProc(x)				((x)->ConnectionFlags & CONN_BITMASK_CONNECTPROC)
#define Conn_IsSocket(x)				((x)->ConnectionFlags & CONN_BITMASK_SOCKET)
#define Conn_IsSockOPT(x)				((x)->ConnectionFlags & CONN_BITMASK_SOCKOPT)
#define Conn_IsKeepAliveOPT(x)				((x)->ConnectionFlags & CONN_BITMASK_KEEPALIVEOPT)
#define Conn_IsBound(x)					((x)->ConnectionFlags & CONN_BITMASK_BOUND)
#define Conn_IsConnecting(x)				((x)->ConnectionFlags & CONN_BITMASK_CONNECTING)
#define Conn_IsConnected(x)				((x)->ConnectionFlags & CONN_BITMASK_CONNECTED)
#define Conn_IsSockName(x)				((x)->ConnectionFlags & CONN_BITMASK_SOCKNAME)
#define Conn_IsPeerName(x)				((x)->ConnectionFlags & CONN_BITMASK_PEERNAME)
#define Conn_IsSSLHandshake(x)				((x)->ConnectionFlags & CONN_BITMASK_SSLHANDSHAKE)
#define Conn_IsWelcome(x)				((x)->ConnectionFlags & CONN_BITMASK_WELCOME)
#define Conn_IsAway(x)					((x)->ConnectionFlags & CONN_BITMASK_AWAY)
#define Conn_IsSentNick(x)				((x)->ConnectionFlags & CONN_BITMASK_SENTNICK)
#define Conn_IsSentAwayNick(x)				((x)->ConnectionFlags & CONN_BITMASK_SENTAWAYNICK)
#define Conn_IsSentPing(x)				((x)->ConnectionFlags & CONN_BITMASK_SENTPING)
#define Conn_IsSentISON(x)				((x)->ConnectionFlags & CONN_BITMASK_SENTISON)
#define Conn_IsSentQuit(x)				((x)->ConnectionFlags & CONN_BITMASK_SENTQUIT)
#define Conn_IsAwayNick(x)				((x)->ConnectionFlags & CONN_BITMASK_AWAYNICK)

#define Conn_IsConnect(x)				((x)->ConnectionFlags & (CONN_BITMASK_CONNECTING|CONN_BITMASK_CONNECTED))


#define ConnISupport_SetInvisible(x)			((x)->UserModeFlags |= CONN_USERMODE_INVISIBLE)
#define ConnISupport_SetNotice(x)			((x)->UserModeFlags |= CONN_USERMODE_NOTICE)
#define ConnISupport_SetWallops(x)			((x)->UserModeFlags |= CONN_USERMODE_WALLOPS)
#define ConnISupport_SetGOper(x)			((x)->UserModeFlags |= CONN_USERMODE_GOPER)
#define ConnISupport_SetLOper(x)			((x)->UserModeFlags |= CONN_USERMODE_LOPER)

#define ConnISupport_SetAnonymous(x)			((x)->ChanModeFlags |= CONN_CHANMODE_ANONYMOUS)
#define ConnISupport_SetInviteOnly(x)			((x)->ChanModeFlags |= CONN_CHANMODE_INVITEONLY)
#define ConnISupport_SetModerated(x)			((x)->ChanModeFlags |= CONN_CHANMODE_MODERATED)
#define ConnISupport_SetNoOutSide(x)			((x)->ChanModeFlags |= CONN_CHANMODE_NOOUTSIDE)
#define ConnISupport_SetQuiet(x)			((x)->ChanModeFlags |= CONN_CHANMODE_QUIET)
#define ConnISupport_SetPrivate(x)			((x)->ChanModeFlags |= CONN_CHANMODE_PRIVATE)
#define ConnISupport_SetSecret(x)			((x)->ChanModeFlags |= CONN_CHANMODE_SECRET)
#define ConnISupport_SetReOP(x)				((x)->ChanModeFlags |= CONN_CHANMODE_REOP)
#define ConnISupport_SetOnlyOPTopic(x)			((x)->ChanModeFlags |= CONN_CHANMODE_ONLYOPTOPIC)
#define ConnISupport_SetKey(x)				((x)->ChanModeFlags |= CONN_CHANMODE_KEY)
#define ConnISupport_SetLimit(x)			((x)->ChanModeFlags |= CONN_CHANMODE_LIMIT)

#define ConnISupport_SetBan(x)				((x)->ChanListModeFlags |= CONN_CHANLISTMODE_BAN)
#define ConnISupport_SetException(x)			((x)->ChanListModeFlags |= CONN_CHANLISTMODE_EXCEPTION)
#define ConnISupport_SetInvitation(x)			((x)->ChanListModeFlags |= CONN_CHANLISTMODE_INVITATION)
#define ConnISupport_SetCreator(x)			((x)->ChanUserModeFlags |= CONN_CHANUSERMODE_CREATOR)
#define ConnISupport_SetOperator(x)			((x)->ChanUserModeFlags |= CONN_CHANUSERMODE_OPERATOR)
#define ConnISupport_SetVoice(x)			((x)->ChanUserModeFlags |= CONN_CHANUSERMODE_VOICE)

#define ConnISupport_ClearInvisible(x)			((x)->UserModeFlags &= ~CONN_USERMODE_INVISIBLE)
#define ConnISupport_ClearNotice(x)			((x)->UserModeFlags &= ~CONN_USERMODE_NOTICE)
#define ConnISupport_ClearWallops(x)			((x)->UserModeFlags &= ~CONN_USERMODE_WALLOPS)
#define ConnISupport_ClearGOper(x)			((x)->UserModeFlags &= ~CONN_USERMODE_GOPER)
#define ConnISupport_ClearLOper(x)			((x)->UserModeFlags &= ~CONN_USERMODE_LOPER)
#define ConnISupport_ClearAnonymous(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_ANONYMOUS)
#define ConnISupport_ClearInviteOnly(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_INVITEONLY)
#define ConnISupport_ClearModerated(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_MODERATED)
#define ConnISupport_ClearNoOutSide(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_NOOUTSIDE)
#define ConnISupport_ClearQuiet(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_QUIET)
#define ConnISupport_ClearPrivate(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_PRIVATE)
#define ConnISupport_ClearSecret(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_SECRET)
#define ConnISupport_ClearReOP(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_REOP)
#define ConnISupport_ClearOnlyOPTopic(x)		((x)->ChanModeFlags &= ~CONN_CHANMODE_ONLYOPTOPIC)
#define ConnISupport_ClearKey(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_KEY)
#define ConnISupport_ClearLimit(x)			((x)->ChanModeFlags &= ~CONN_CHANMODE_LIMIT)
#define ConnISupport_ClearBan(x)			((x)->ChanListModeFlags &= ~CONN_CHANLISTMODE_BAN)
#define ConnISupport_ClearException(x)			((x)->ChanListModeFlags &= ~CONN_CHANLISTMODE_EXCEPTION)
#define ConnISupport_ClearInvitation(x)			((x)->ChanListModeFlags &= ~CONN_CHANLISTMODE_INVITATION)
#define ConnISupport_ClearCreator(x)			((x)->ChanUserModeFlags &= ~CONN_CHANUSERMODE_CREATOR)
#define ConnISupport_ClearOperator(x)			((x)->ChanUserModeFlags &= ~CONN_CHANUSERMODE_OPERATOR)
#define ConnISupport_ClearVoice(x)			((x)->ChanUserModeFlags &= ~CONN_CHANUSERMODE_VOICE)

#define ConnISupport_IsInvisible(x)			((x)->UserModeFlags & CONN_USERMODE_INVISIBLE)
#define ConnISupport_IsNotice(x)			((x)->UserModeFlags & CONN_USERMODE_NOTICE)
#define ConnISupport_IsWallops(x)			((x)->UserModeFlags & CONN_USERMODE_WALLOPS)
#define ConnISupport_IsGOper(x)				((x)->UserModeFlags & CONN_USERMODE_GOPER)
#define ConnISupport_IsLOper(x)				((x)->UserModeFlags & CONN_USERMODE_LOPER)
#define ConnISupport_IsAnonymous(x)			((x)->ChanModeFlags & CONN_CHANMODE_ANONYMOUS)
#define ConnISupport_IsInviteOnly(x)			((x)->ChanModeFlags & CONN_CHANMODE_INVITEONLY)
#define ConnISupport_IsModerated(x)			((x)->ChanModeFlags & CONN_CHANMODE_MODERATED)
#define ConnISupport_IsNoOutSide(x)			((x)->ChanModeFlags & CONN_CHANMODE_NOOUTSIDE)
#define ConnISupport_IsQuiet(x)				((x)->ChanModeFlags & CONN_CHANMODE_QUIET)
#define ConnISupport_IsPrivate(x)			((x)->ChanModeFlags & CONN_CHANMODE_PRIVATE)
#define ConnISupport_IsSecret(x)			((x)->ChanModeFlags & CONN_CHANMODE_SECRET)
#define ConnISupport_IsReOP(x)				((x)->ChanModeFlags & CONN_CHANMODE_REOP)
#define ConnISupport_IsOnlyOPTopic(x)			((x)->ChanModeFlags & CONN_CHANMODE_ONLYOPTOPIC)
#define ConnISupport_IsKey(x)				((x)->ChanModeFlags & CONN_CHANMODE_KEY)
#define ConnISupport_IsLimit(x)				((x)->ChanModeFlags & CONN_CHANMODE_LIMIT)
#define ConnISupport_IsBan(x)				((x)->ChanListModeFlags & CONN_CHANLISTMODE_BAN)
#define ConnISupport_IsException(x)			((x)->ChanListModeFlags & CONN_CHANLISTMODE_EXCEPTION)
#define ConnISupport_IsInvitation(x)			((x)->ChanListModeFlags & CONN_CHANLISTMODE_INVITATION)
#define ConnISupport_IsCreator(x)			((x)->ChanUserModeFlags & CONN_CHANUSERMODE_CREATOR)
#define ConnISupport_IsOperator(x)			((x)->ChanUserModeFlags & CONN_CHANUSERMODE_OPERATOR)
#define ConnISupport_IsVoice(x)				((x)->ChanUserModeFlags & CONN_CHANUSERMODE_VOICE)

/* STRUCTURES - JONAS (18.07.2001) */

struct Conn_Struct {

  char *Name;
  char *Nick;
  char *AwayNick;
  char *User;
  char *Host;
  char *Mode;
  char *Info;
  char *Chans;
  char *AwayMsg;
  char *PublicDetachMsg;
  char *PublicAttachMsg;
  char *NickServNUH;
  char *NickServPass;
  unsigned long int ConfFlags;
  unsigned short int MaxClients;
  unsigned short int SendMaxLines;
  unsigned short int SendLineTime;
  unsigned short int SendMaxBuffer;
  unsigned short int SendBufferTime;

  unsigned short int NumServers;
  struct ConnServer_Struct *Server_Head;
  struct ConnServer_Struct *Server_Tail;


  unsigned long int Flags;
  char *FileName;
  unsigned short int NumClients;
  struct ConnServer_Struct *ConnServerTry;


  unsigned long int ResolveFlags;
  char *HostName;
  char *HostIPS;
  struct in_addr INAddr;
#if IPV6_SUPPORT
  struct in6_addr INAddr6;
#endif
  unsigned long int PortH;
  unsigned long int PortN;

  unsigned long int ServerResolveFlags;
  char *ServerHostName;
  char *ServerHostIPS;

  struct in_addr ServerINAddr;
#if IPV6_SUPPORT
  struct in6_addr ServerINAddr6;
#endif
  unsigned long int ServerPortH;
  unsigned long int ServerPortN;
  char *ServerPass;

  unsigned long long int ConnectionFlags;
  signed long int FD;
  char *ServerName;
  char *IRCNick;
  char *Welcome[5];
  char **ISupport_String;
  unsigned short int ISupportLines;
  struct IRC_ISupport_Struct ISupport;
  unsigned long int UserModeFlags;
  unsigned long int ChanModeFlags;
  unsigned long int ChanListModeFlags;
  unsigned long int ChanUserModeFlags;
  unsigned short int NumSendQs;
  struct SendQ_Struct *SendQ_Head;
  unsigned short int NumFlushLs;
  unsigned long int SendQMaxFlushLines;
  struct FlushL_Struct *FlushL_Head;
  struct FlushL_Struct *FlushL_Tail;
  unsigned short int NumFlushBs;
  unsigned long int SendQMaxFlushBuffer;
  struct FlushB_Struct *FlushB_Head;
  struct FlushB_Struct *FlushB_Tail;
  char *RecvBuffer;
  char *SendBuffer;
  unsigned short int NicksIndex;
  time_t ConnectProcTime;
  time_t ConnectTime;
  time_t ConnectedTime;
  time_t SentPingTime;
  time_t SentQuitTime;
  time_t LastRecvTime;
  time_t IgnoreExpireTime;
  time_t SentISONTime;
  time_t LogError;

  unsigned short int NumChans;
  struct Chan_Struct *Chan_Head;
  struct Chan_Struct *Chan_Tail;
  struct Chan_Struct *Chan_Table[CHAN_HASHSIZE];

  unsigned short int NumIgnores;
  struct Ignore_Struct *Ignore_Head;
  struct Ignore_Struct *Ignore_Tail;

#if SSL_SUPPORT
  SSL *SSL_H;
  X509 *Cert;
#endif

  struct Conn_Struct *Prev;
  struct Conn_Struct *Next;

};

struct ConnServer_Struct {

  char *Host;
  unsigned long int Port;
  char *Pass;

  unsigned short int Tries;

  struct ConnServer_Struct *Prev;
  struct ConnServer_Struct *Next;

};

/* FUNCTION PROTOTYPES - JONAS (18.07.2001) */

struct Conn_Struct *conn_add(struct ConnConf_Struct *ConnConf);
void conn_rem(struct Conn_Struct *ConnS);
struct Conn_Struct *conn_get(const char *const NamePT);
struct ConnServer_Struct *conn_addserver(struct Conn_Struct *ConnS, const char *const HostPT, const unsigned long int Port, const char *const PassPT);
void conn_remserver(struct Conn_Struct *ConnS, struct ConnServer_Struct *ConnServer);
struct ConnServer_Struct *conn_getserver(struct Conn_Struct *ConnS, const char *const HostPT);
void conn_destroyservers(struct Conn_Struct *ConnS);
void conn_initconnection(struct Conn_Struct *ConnS);

#endif


syntax highlighted by Code2HTML, v. 0.9.1