/*
* Tcp4u v3.31 creation date: may 93 modif: 27/02/1998
*
*===========================================================================
*
* Project: Tcp4u, Library for tcp protocol
* File: tcp4u.h
* Purpose: Common Unix-Windows Header file
*
*===========================================================================
*
* This software is Copyright (c) 1996-1998 by Philippe Jounin
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*
* If you make modifications to this software that you feel
* increases it usefulness for the rest of the community, please
* email the changes, enhancements, bug fixes as well as any and
* all ideas to me. This software is going to be maintained and
* enhanced as deemed necessary by the community.
*
*
* Philippe Jounin (ph.jounin@computer.org)
*/
#ifndef _TCP4UX_H_
#define _TCP4UX_H_
#ifndef TCP4UX_API
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
/* ------------------ */
/* types declarations */
/* ------------------ */
/* ******************************************** */
/* Summary: */
/* BOOLEAN -> int */
/* DWORD -> 4-bytes struct */
/* DWORD_PTR -> char[4] */
/* HFILE -> int */
/* LPCSTR -> const char * */
/* LPSTR -> char * */
/* SOCKET -> unsigned int */
/* UINT -> unsigned int */
/* ******************************************** */
/* ------------------------------------------------------------- */
#if (!defined _WINDOWS_ && !defined WINVER && !defined WIN32 && !defined _WINDOWS)
#ifndef INADDRSZ
# define INADDRSZ 4
#endif
struct S_Tcp4uxDword { unsigned char a [INADDRSZ]; } ;
typedef struct S_Tcp4uxDword DWORD;
typedef unsigned char DWORD_PTR [INADDRSZ]; /* a pointer on a 4 bytes integer */
#ifndef TYPE_HFILE_DEF
typedef int HFILE; /* file identifier */
# define TYPE_HFILE_DEF
#endif /* def type HFILE */
#ifndef TYPE_SOCKET_DEF
typedef unsigned int SOCKET;
# define TYPE_SOCKET_DEF
#endif /* def type SOCKET */
#ifndef TYPE_BOOL_DEF
typedef int BOOL;
# define TYPE_BOOL_DEF
#endif /* def type BOOL */
#ifndef TYPE_LPSTR_DEF
typedef char * LPSTR;
# define TYPE_LPSTR_DEF
#endif /* def type LPSTR */
#ifndef TYPE_UINT_DEF
# ifndef UINT
typedef unsigned int UINT;
# endif /* UINT */
# define TYPE_UINT_DEF
#endif /* def type UINT */
#ifndef TYPE_LPCSTR_DEF
typedef const char * LPCSTR;
# define TYPE_LPCSTR_DEF
#endif /* def type LPCSTR */
#ifndef INVALID_SOCKET
# define INVALID_SOCKET ((SOCKET) -1)
#endif /* INVALID_SOCKET */
#ifndef SOCKET_ERROR
# define SOCKET_ERROR -1
#endif /* SOCKET_ERROR */
#ifndef HFILE_ERROR
# define HFILE_ERROR -1
#endif /* HFILE_ERROR */
#define API4U
#define CALLBACK
#define far
#else /* _WINDOWS_ defined */
# include <winsock.h>
# ifndef API4U
# define API4U PASCAL FAR
# endif
# if (defined WIN32 || defined _WIN32)
# define far
# endif
#endif /* _WINDOWS_ not defined */
/* ------------------------------------------------------------- */
/* ------------------------------- */
/* Return codes of TCP4W functions */
/* ------------------------------- */
#define TCP4U_SUCCESS 1 /* >=1 function OK */
#define TCP4U_ERROR -1 /* error */
#define TCP4U_TIMEOUT -2 /* timeout has occured */
#define TCP4U_BUFFERFREED -3 /* the buffer has been freed */
#define TCP4U_HOSTUNKNOWN -4 /* connect to unknown host */
#define TCP4U_NOMORESOCKET -5 /* all socket has been used */
#define TCP4U_NOMORERESOURCE -5 /* or no more free resource */
#define TCP4U_CONNECTFAILED -6 /* connect function has failed*/
#define TCP4U_UNMATCHEDLENGTH -7 /* TcpPPRecv : Error in length*/
#define TCP4U_BINDERROR -8 /* bind failed (Task already started?) */
#define TCP4U_OVERFLOW -9 /* Overflow during TcpPPRecv */
#define TCP4U_EMPTYBUFFER -10 /* TcpPPRecv receives 0 byte */
#define TCP4U_CANCELLED -11 /* Call cancelled by signal */
#define TCP4U_INSMEMORY -12 /* Not enough memory */
#define TCP4U_BADPORT -13 /* Bad port number or alias */
#define TCP4U_SOCKETCLOSED 0 /* Host has closed connection */
#define TCP4U_FILE_ERROR -14 /* A file operation has failed*/
/* ------------------------------ */
/* Return codes of TN4W functions */
/* ------------------------------ */
#define TN_SUCCESS TCP4U_SUCCESS
#define TN_ERROR TCP4U_ERROR
#define TN_TIMEOUT TCP4U_TIMEOUT
#define TN_BUFFERFREED TCP4U_BUFFERFREED
#define TN_SOCKETCLOSED TCP4U_SOCKETCLOSED
#define TN_CANCELLED TCP4U_CANCELLED
#define TN_OVERFLOW 2
#define TN_UNEXPECTED -999 /* internal only */
/* ------------------------------- */
/* Different modes for TcpRecv */
/* ------------------------------- */
#define TCP4U_WAITFOREVER 0
#define TCP4U_DONTWAIT ((unsigned) -1)
/* ------------------------------ */
/* Log levels */
/* ------------------------------ */
#define LOG4U_CALL 0x0001 /* log each tcp socket function */
#define LOG4U_DBCALL 0x0002 /* log db socket function */
#define LOG4U_INTERN 0x0008 /* log each app level call */
#define LOG4U_PROC 0x0010 /* log each Tcp4u/Tn4u APIs called */
#define LOG4U_HIPROC 0x0020 /* log each app level call */
#define LOG4U_EXIT 0x0040 /* log each Tcp4u/Tn4u APIs called */
#define LOG4U_HIEXIT 0x0080 /* log each app level call */
#define LOG4U_DUMP 0x4000 /* dump frames */
#define LOG4U_ERROR 0x8000 /* log errors */
#define LOG4U_ALL 0xFFFF /* get all logs */
/* ------------------------------------------------- */
/* Registration functions */
/* ------------------------------------------------- */
int API4U Tcp4uInit (void);
int API4U Tcp4uCleanup (void);
int API4U Tcp4uVer (LPSTR szInfo, UINT uBufSize);
LPSTR API4U Tcp4uErrorString (int Rc);
void API4U Tcp4uEnableLog (unsigned uMask);
void API4U Tcp4uDump (LPCSTR cp, int nLen, LPCSTR szPrefix);
/* ------------------------------------------------- */
/* TCP functions */
/* ------------------------------------------------- */
int API4U TcpAbort (void);
int API4U TcpAccept (SOCKET *pCSock, SOCKET ListenSock, UINT nTO);
int API4U TcpConnect (SOCKET *pS, LPCSTR szServer, LPCSTR szService,
unsigned short *lpPort);
int API4U TcpClose (SOCKET *pS);
int API4U TcpFlush (SOCKET s);
int API4U TcpGetListenSocket (SOCKET *pS, LPCSTR szService,
unsigned short *lpPort, int nPendingConnection);
int API4U TcpRecv (SOCKET s, LPSTR szBuf, unsigned uBufSize, unsigned uTimeOut, HFILE hf);
int API4U TcpSend (SOCKET s, LPCSTR szBuf, unsigned uBufSize, BOOL bHighPriority, HFILE hf);
int API4U TcpGetLocalID (LPSTR szStrName, int uNameSize, DWORD *lpAddress);
int API4U TcpGetRemoteID (SOCKET s, LPSTR szStrName, int uNameSize, DWORD *lpAddress);
BOOL API4U TcpIsDataAvail (SOCKET s);
BOOL API4U TcpIsOOBDataAvail (SOCKET s);
/* PP protocole (2 first bytes contain length of data) */
int API4U TcpPPRecv (SOCKET s, LPSTR szBuf, unsigned uBufSize, unsigned uTimeOut,
BOOL bExact, HFILE hLogFile);
int API4U TcpPPSend (SOCKET s, LPCSTR szBuf, unsigned uBufSize, HFILE hLogFile);
/* Recv Until family */
int API4U TcpRecvUntilStr (SOCKET s, LPSTR szBuf,unsigned *lpBufSize,
LPSTR szStop, unsigned uStopSize, BOOL bCaseSensitive,
unsigned uTimeOut, HFILE hLogFile);
typedef BOOL (CALLBACK far *TRANSFER_CBK) (
#ifdef NEED_PROTO
long, long, long, LPSTR
#endif
);
int API4U TcpRecvUntilClosedEx (SOCKET *pCSock, LPCSTR szLocalFile,
TRANSFER_CBK CbkTransmit,
unsigned uTimeout, unsigned int uBufSize,
long lUserValue, long lTotalBytes);
/* ------------------------------------------------- */
/* Telnet functions */
/* ------------------------------------------------- */
int API4U TnReadMultiLine (SOCKET s, LPSTR szBuf, UINT BufSize, UINT uTimeOut, HFILE hf);
int API4U TnReadLine (SOCKET s, LPSTR szBuf, UINT BufSize, UINT uTimeOut, HFILE hf);
int API4U TnSendMultiLine (SOCKET s, LPCSTR szString, BOOL bEnd, HFILE hf);
int API4U TnSend (SOCKET s, LPCSTR szString, BOOL bHighPriority, HFILE hf);
int API4U TnGetAnswerCode(SOCKET s,LPSTR szInBuf,UINT uBufSize,UINT uTimeOut, HFILE hf);
/* ------------------------------------------------- */
/* Telnet_based protocol functions */
/* ------------------------------------------------- */
struct S_TnProto
{
LPSTR szString;
int iCode;
};
typedef int (CALLBACK far *TNPROTOEXCHG_CBK) (
#ifdef NEED_PROTO
SOCKET, LPSTR, UINT, UINT, HFILE
#endif
);
int API4U TnProtoExchange (SOCKET s,
LPCSTR szCommande,
LPSTR szResponse,
UINT uBufSize,
TNPROTOEXCHG_CBK TnProtoRecv,
struct S_TnProto far *tTranslation,
int nTabSize,
BOOL bCaseCmp,
UINT uTimeout,
HFILE hLogFile);
/* ------------------------------------------------- */
/* Old declarations, compatibility with version 1.5 */
/* ------------------------------------------------- */
#define IP_SUCCESS 1 /* >=1 function OK */
#define IP_ERROR -1 /* error */
#define IP_TIMEOUT -2 /* timeout has occured */
#define IP_BUFFERFREED -3 /* the buffer has been freed */
#define IP_HOSTUNKNOWN -4 /* connect to unknown host */
#define IP_NOMORESOCKET -5 /* all socket has been used */
#define IP_NOMORERESOURCE -5 /* or no more free resource */
#define IP_CONNECTFAILED -6 /* connect function has failed*/
#define IP_UNMATCHEDLENGTH -7 /* TcpPPRecv : Error in length*/
#define IP_BINDERROR -8 /* bind failed (Task already started?) */
#define IP_OVERFLOW -9 /* Overflow during TcpPPRecv */
#define IP_EMPTYBUFFER -10 /* TcpPPRecv receives 0 byte */
#define IP_CANCELLED -11 /* Call cancelled by TcpAbort */
#define IP_INSMEMORY -12 /* Not enough memory */
#define IP_SOCKETCLOSED 0 /* Host has close connection */
int API4U Tcp4wInit (void);
int API4U Tcp4wCleanup (void);
int API4U Tcp4wVer (LPSTR szInfo, UINT uBufSize);
LPSTR API4U Tcp4wErrorString (int Rc);
#ifdef __cplusplus
} /* End of extern "C" */
#endif /* ifdef __cplusplus */
#define TCPUX_API loaded
#endif /* ifndef TCP4UX_API */
#endif
syntax highlighted by Code2HTML, v. 0.9.1