/*
     SCOL sockets - Unix  . Magma 1.0 . 1996 . Sylvain HUET

     socket.h : definitions des routines sockets bas-niveau
*/
// Modification history:
//
//$ FA(02/07/2001): Define SOCKET are related constants here
//

#ifndef _SOCKET_H_
#define _SOCKET_H_

#include "scolPrerequisites.h"
#undef EXT
#ifndef SCOL_SOCKET_C
  #define EXT extern
#else
  #define EXT
#endif

extern int socklife;
extern int STDPORT;
extern int localscolIP;
extern int proxyIp;
extern int proxyPort;
extern int proxyMask;

EXT int socklife;
EXT int sockudp;
EXT int SCOLport;

EXT char *http_proxy_host;
EXT int http_proxy_port;


#include "vscol.h"

#if SCOL_PLATFORM == SCOL_PLATFORM_WINDOWS
	#define WSA_ASYNC WM_USER+1
	#define WSA_GETHOST WM_USER+2
	#define WSA_LOOP WM_USER+3

	EXT int SCKstarthostname(HWND h);
	EXT int SCKendhostname(LONG lParam);
#else
	// Linux version
	#define SOCKET int
	#define SOCKADDR_IN struct sockaddr_in
	#define INVALID_SOCKET -1
	#define HANDLE FILE*
	#define INVALID_HANDLE_VALUE NULL
	#define closesocket close

	#define FD_ACCEPT   1
	#define FD_READ     2
	#define FD_WRITE    3
	#define FD_CLOSE    4
	#define FD_CONNECT  5

	#define SC_NONE      (-1)
	#define SC_TYPCHN      0
	#define SC_TYPSRV      1
	#define SC_TYPUDP      2
	#define SC_TYPHTTP     3
	#define SC_TYPHTTPSRV  4
	#define SC_TYPTELNET   5
	#define SC_TYPINET     6
#endif

EXT int  SCKaddsock(int s,int typ);
EXT int  SCKdelsock(int s);
EXT int  SCKclrwrite(int s);
EXT int  SCKsetwrite(int s);
EXT int  SCKinit(void* x);
EXT int  SCKend();
EXT int  SCKsetproxy(char *ip, char *port,char *mask);
EXT int  SCKloopbackIP();
EXT int  SCKgethostIP();
EXT int  SCKgetnbIP();
EXT int  SCKgetnthIP(char *buf,int i);
EXT char *SCKhostname(char *buf);
EXT char *SCKhostIP(char *buf);
EXT char *SCKgetstringbyip(char *buf,int ip,int port);
EXT char *SCKgetstringbyip2(char *buf,int ip);
EXT char *SCKgethostbyname(char *buf,char *name);
EXT char *SCKgetnamebyIP(char *buf,char *IP);
EXT int  SCKstartserver(int port);
EXT int  SCKaccept(int s,int *ip,int *port);
EXT int  SCKconnect(char *addr,int *ip,int *port, int *proxy);
EXT int  SCKstartudpserver(int port);
EXT int  SCKsendudp(char *addr,char *txt, int len);
EXT int  SCKsendudpchn(int sock,char *addr,char *txt, int len);
EXT int  SCKclose(int s);
EXT int  SCKcloseserver(int s);
EXT int  SCKsend(int s,char *buf, int len);
EXT int  SCKrecv(int s,char *buf, int len,int *ip,int *port);
EXT int  SCKpostclose(int s);

#ifndef INADDR_NONE
#define INADDR_NONE ((uint32_t) 0xffffffff)
#endif
extern char forcedIP[64];
int SCKbindadress();
int SCKlocalconnection();

#endif // socket.h
