Files
asterisk/addons/ooh323c/src/ooSocket.h
Josh Soref 01697d4836 addons: Spelling fixes
Correct typos of the following word families:

definition
listener
fastcopy
logical
registration
classify
documentation
explicitly
dialed
endpoint
elements
arithmetic
might
prepend
byte
terminal
inquiry
skipping
aliases
calling
absent
authentication
transmit
their
ericsson
disconnecting
redir
items
client
adapter
transmitter
existing
satisfies
pointer
interval
supplied

ASTERISK-29714

Change-Id: I8548438246f7b718d88e0b9e0a1eb384bbec88e4
2021-11-16 06:00:43 -06:00

414 lines
16 KiB
C

/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooSocket.h
* Common runtime constants, data structure definitions, and run-time functions
* to support the sockets' operations.
*/
#ifndef _OOSOCKET_H_
#define _OOSOCKET_H_
#include "asterisk/poll-compat.h"
#include "asterisk/compiler.h"
#ifdef _WIN32_WCE
#include <winsock.h>
#elif defined(_WIN32) || defined(_WIN64)
#include <sys/types.h>
#define INCL_WINSOCK_API_TYPEDEFS 1
#define INCL_WINSOCK_API_PROTOTYPES 0
#include <winsock2.h>
#else
#include <sys/types.h>
#include "sys/time.h"
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <net/if.h>
#endif
#include "ooasn1.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef EXTERN
#ifdef MAKE_DLL
#define EXTERN __declspec(dllexport)
#elif defined (USEASN1DLL)
#define EXTERN __declspec(dllimport)
#else
#define EXTERN
#endif /* MAKE_DLL */
#endif /* EXTERN */
/**
* @defgroup sockets Socket Layer
* @{
*/
#if defined (_WIN64)
typedef unsigned __int64 OOSOCKET; /**< Socket's handle */
#elif defined (_WIN32)
typedef unsigned int OOSOCKET; /**< Socket's handle */
#else
typedef int OOSOCKET; /**< Socket's handle */
#endif
#define OOSOCKET_INVALID ((OOSOCKET)-1)
/**
* The IP address represented as unsigned long value. The most significant 8
* bits in this unsigned long value represent the first number of the IP
* address. The least significant 8 bits represent the last number of the IP
* address.
*/
/* typedef unsigned long OOIPADDR; */
typedef struct ast_sockaddr OOIPADDR;
#define OOIPADDR_ANY ((OOIPADDR)0)
#define OOIPADDR_LOCAL ((OOIPADDR)0x7f000001UL) /* 127.0.0.1 */
typedef struct OOInterface{
char *name;
char *addr;
char *mask;
struct OOInterface *next;
}OOInterface;
/**
* This function permits an incoming connection attempt on a socket. It
* extracts the first connection on the queue of pending connections on socket.
* It then creates a new socket and returns a handle to the new socket. The
* newly created socket is the socket that will handle the actual connection
* and has the same properties as original socket. See description of 'accept'
* socket function for further details.
*
* @param socket The socket's handle created by call to ::rtSocketCreate
* function.
* @param pNewSocket The pointer to variable to receive the new socket's
* handle.
* @param destAddr Optional pointer to a buffer that receives the IP
* address of the connecting entity. It may be NULL.
* @param destPort Optional pointer to a buffer that receives the port of
* the connecting entity. It may be NULL.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
char* destAddr, int* destPort);
/**
* This function converts an IP address to its string representation.
*
* @param ipAddr The IP address to be converted.
* @param pbuf Pointer to the buffer to receive a string with the IP
* address.
* @param bufsize Size of the buffer.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketAddrToStr (OOIPADDR ipAddr, char* pbuf, int bufsize);
/**
* This function associates a local address with a socket. It is used on an
* unconnected socket before subsequent calls to the ::rtSocketConnect or
* ::rtSocketListen functions. See description of 'bind' socket function for
* further details.
*
* @param socket The socket's handle created by call to ::rtSocketCreate
* function.
* @param addr The local IP address to assign to the socket.
* @param port The local port number to assign to the socket.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketBind (OOSOCKET socket, OOIPADDR addr, int port);
/**
* This function closes an existing socket.
*
* @param socket The socket's handle created by call to ::rtSocketCreate
* or ::rtSocketAccept function.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketClose (OOSOCKET socket);
/**
* This function establishes a connection to a specified socket. It is used to
* create a connection to the specified destination. When the socket call
* completes successfully, the socket is ready to send and receive data. See
* description of 'connect' socket function for further details.
*
* @param socket The socket's handle created by call to ::rtSocketCreate
* function.
* @param host The null-terminated string with the IP address in the
* following format: "NNN.NNN.NNN.NNN", where NNN is a
* number in the range (0..255).
* @param port The destination port to connect.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketConnect (OOSOCKET socket, const char* host, int port);
/**
* This function creates a socket. The only streaming TCP/IP sockets are
* supported at the moment.
*
* @param psocket The pointer to the socket's handle variable to receive
* the handle of new socket.
* @param family Which family socket will created
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketCreate (OOSOCKET* psocket, int family);
/**
* This function creates a UDP datagram socket.
*
* @param psocket The pointer to the socket's handle variable to receive
* the handle of new socket.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketCreateUDP (OOSOCKET* psocket, int family);
/**
* This function initiates use of sockets by an application. This function must
* be called first before use sockets.
*
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketsInit (void);
/**
* This function terminates use of sockets by an application. This function
* must be called after done with sockets.
*
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketsCleanup (void);
/**
* This function places a socket a state where it is listening for an incoming
* connection. To accept connections, a socket is first created with the
* ::rtSocketCreate function and bound to a local address with the
* ::rtSocketBind function, a maxConnection for incoming connections is
* specified with ::rtSocketListen, and then the connections are accepted with
* the ::rtSocketAccept function. See description of 'listen' socket function
* for further details.
*
* @param socket The socket's handle created by call to
* ::rtSocketCreate function.
* @param maxConnection Maximum length of the queue of pending connections.
* @return Completion status of operation: 0 (ASN_OK) =
* success, negative return value is error.
*/
EXTERN int ooSocketListen (OOSOCKET socket, int maxConnection);
/**
* This function is used to peek at the received data without actually removing
* it from the receive socket buffer. A receive call after this will get the
* same data from the socket.
* @param socket The socket's handle created by call to ::rtSocketCreate
* or ::rtSocketAccept function.
* @param pbuf Pointer to the buffer for the incoming data.
* @param bufsize Length of the buffer.
* @return If no error occurs, returns the number of bytes
* received. Otherwise, the negative value is error code.
*/
EXTERN int ooSocketRecvPeek
(OOSOCKET socket, ASN1OCTET* pbuf, ASN1UINT bufsize);
/**
* This function receives data from a connected socket. It is used to read
* incoming data on sockets. The socket must be connected before calling this
* function. See description of 'recv' socket function for further details.
*
* @param socket The socket's handle created by call to ::rtSocketCreate
* or ::rtSocketAccept function.
* @param pbuf Pointer to the buffer for the incoming data.
* @param bufsize Length of the buffer.
* @return If no error occurs, returns the number of bytes
* received. Otherwise, the negative value is error code.
*/
EXTERN int ooSocketRecv (OOSOCKET socket, ASN1OCTET* pbuf,
ASN1UINT bufsize);
/**
* This function receives data from a connected/unconnected socket. It is used
* to read incoming data on sockets. It populates the remotehost and
* remoteport parameters with information of remote host. See description of
* 'recvfrom' socket function for further details.
*
* @param socket The socket's handle created by call to ooSocketCreate
*
* @param pbuf Pointer to the buffer for the incoming data.
* @param bufsize Length of the buffer.
* @param remotehost Pointer to a buffer in which remote ip address
* will be returned.
* @param hostBufLen Length of the buffer passed for remote ip address.
* @param remoteport Pointer to an int in which remote port number
* will be returned.
*
* @return If no error occurs, returns the number of bytes
* received. Otherwise, negative value.
*/
EXTERN int ooSocketRecvFrom (OOSOCKET socket, ASN1OCTET* pbuf,
ASN1UINT bufsize, char * remotehost,
ASN1UINT hostBufLen, int * remoteport);
/**
* This function sends data on a connected socket. It is used to write outgoing
* data on a connected socket. See description of 'send' socket function for
* further details.
*
* @param socket The socket's handle created by call to ::rtSocketCreate
* or ::rtSocketAccept function.
* @param pdata Buffer containing the data to be transmitted.
* @param size Length of the data in pdata.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketSend (OOSOCKET socket, const ASN1OCTET* pdata,
ASN1UINT size);
/**
* This function sends data on a connected or unconnected socket. See
* description of 'sendto' socket function for further details.
*
* @param socket The socket's handle created by call to ::rtSocketCreate
* or ::rtSocketAccept function.
* @param pdata Buffer containing the data to be transmitted.
* @param size Length of the data in pdata.
* @param remotehost Remote host ip address to which data has to
* be sent.
* @param remoteport Remote port ip address to which data has to
* be sent.
*
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketSendTo(OOSOCKET socket, const ASN1OCTET* pdata,
ASN1UINT size, const char* remotehost,
int remoteport);
/**
* This function is used for synchronous monitoring of multiple sockets.
* For more information refer to documentation of "select" system call.
*
* @param nfds The highest numbered descriptor to be monitored
* plus one.
* @param readfds The descriptors listed in readfds will be watched for
* whether read would block on them.
* @param writefds The descriptors listed in writefds will be watched for
* whether write would block on them.
* @param exceptfds The descriptors listed in exceptfds will be watched for
* exceptions.
* @param timeout Upper bound on amout of time elapsed before select
* returns.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketSelect(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval * timeout) attribute_deprecated;
EXTERN int ooSocketPoll(struct pollfd *pfds, int nfds, int timeout);
EXTERN int ooPDRead(struct pollfd *pfds, int nfds, int fd);
EXTERN int ooPDWrite(struct pollfd *pfds, int nfds, int fd);
/**
* This function converts the string with IP address to a double word
* representation. The converted address may be used with the ::rtSocketBind
* function.
*
* @param pIPAddrStr The null-terminated string with the IP address in the
* following format: "NNN.NNN.NNN.NNN", where NNN is a
* number in the range (0..255).
* @param pIPAddr Pointer to the converted IP address.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
/* EXTERN int ooSocketStrToAddr (const char* pIPAddrStr, OOIPADDR* pIPAddr); */
/**
* This function converts an internet dotted ip address to network address
*
* @param inetIp The null-terminated string with the IP address in the
* following format: "NNN.NNN.NNN.NNN", where NNN is a
* number in the range (0..255).
* @param netIp Buffer in which the converted address will be returned.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
/* EXTERN int ooSocketConvertIpToNwAddr(char *inetIp, unsigned char *netIp); */
/**
* This function retrives the IP address of the local host.
*
* @param pIPAddrs Pointer to a char buffer in which local IP address will be
* returned.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooGetLocalIPAddress(char * pIPAddrs);
EXTERN int ooSocketGetSockName(OOSOCKET socket, struct sockaddr_in *name,
socklen_t *size);
EXTERN long ooSocketHTONL(long val);
EXTERN short ooSocketHTONS(short val);
/**
* This function is used to retrieve the ip and port number used by the socket
* passed as parameter. It internally uses getsockname system call for this
* purpose.
* @param socket Socket for which ip and port has to be determined.
* @param ip Buffer in which ip address will be returned.
* @param len Length of the ip address buffer.
* @param port Pointer to integer in which port number will be returned.
* @param family Pointer to integer in which IP family (4 or 6) will be returned
*
* @return ASN_OK, on success; -ve on failed.
*/
EXTERN int ooSocketGetIpAndPort(OOSOCKET socket, char *ip, int len, int *port, int *family);
EXTERN int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* _OOSOCKET_H_ */