// --------------------------------------------------------------------------------------------------------------
//
//   AmiGnut 0.9.0 Network Header
//
//   Copyright (C) 2001 Jay Cornwall <jay@realfantasy.demon.co.uk>
//
//   This is free software distributed under the terms of the GNU Public License. See the file License.txt for
//   details.
//
// --------------------------------------------------------------------------------------------------------------

#include <bsdsocket/socketbasetags.h>
#include <devices/timer.h>
#include <libraries/mui.h>
#include <mui/lamp_mcc.h>
#include <mui/nlist_mcc.h>

#include <clib/alib_protos.h>
#include "local/socket_loc.h"
#include <proto/exec.h>

#include <netdb.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/errno.h>
#include <sys/filio.h>
#include <sys/socket.h>

#include "Enum.h"
#include "Error_defs.h"
#include "IPC_defs.h"
#include "List_defs.h"
#include "Network_defs.h"

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

#define IsMinListEmpty(x) ( ((x)->mlh_TailPred) == (struct MinNode *)(x) )

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

// Internal prototypes

BOOL BeginConnect();
void CloseHandler();
BOOL ConnectHandler(LONG, UBYTE);
void Disconnect();
void FreeTimer();
BOOL GnutellaBranch();
BOOL GnutellaCache();
BOOL GnutellaHandshake(LONG, UBYTE);
BOOL GnutellaSend(LONG, struct GnutellaDescriptor *);
BOOL InitTimer();
void NetworkHandler();
BOOL ReadHandler(LONG);
BOOL WriteHandler(LONG);

// External prototypes

void ClearConnectionList();
struct ConnectionNode *FindConnectionNode();
void FreeMinList(struct MinList *, UBYTE);
LONG GetLocalIP();
struct Library *GetSocketBase();
void RandomID(UBYTE *);
void *ReAllocVec(void *, ULONG, ULONG);
void RemoveConnectionListEntry(struct ConnectionNode *);
void ShowErrorMessage(char *, UBYTE);

// External references

extern BOOL NetworkGotSemaphore;
extern char HCHostname[];
extern Object *App, *Gadgets[], *Menus[];
extern struct MsgPort *IPCMTNMsgPort;
extern struct Process *NetworkProcess;
extern struct SignalSemaphore IPCMTNMsgPortSemaphore;
extern UBYTE MaxOutgoingConns;
extern UWORD FloodLimit, HCPort;

// Misc stuff

BOOL MNInterrupt = FALSE, OutOfMemory = FALSE;
struct MinList ConnectionList, HostCacheList;
struct MsgPort *TimerMsgPort = NULL;
struct timerequest *TimerIO = NULL;
UBYTE OutgoingConnections, IncomingConnections, PendingConnections;
UWORD HostCacheCount;
ULONG LocalIP;

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

// End Of Text
