ZNC  trunk
Classes | Macros | Typedefs | Enumerations | Functions | Variables
Csocket.h File Reference
#include "defines.h"
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/file.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netdb.h>
#include <sys/select.h>
#include <unicode/ucnv.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <vector>
#include <list>
#include <iostream>
#include <sstream>
#include <string>
#include <set>
#include <map>
#include <sys/un.h>
+ Include dependency graph for Csocket.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  CSCharBuffer
 Ease of use self deleting char * class. More...
 
class  CSSockAddr
 sockaddr wrapper. More...
 
class  CGetAddrInfo
 this function is a wrapper around getaddrinfo (for ipv6) More...
 
class  CCron
 this is the main cron job class More...
 
class  CSMonitorFD
 Class to tie sockets to for monitoring by Csocket at either the Csock or TSockManager. More...
 
class  CSockCommon
 simple class to share common code to both TSockManager and Csock More...
 
class  Csock
 Basic socket class. More...
 
class  CSConnection
 options for creating a connection More...
 
class  CSSSLConnection
 
class  CSListener
 options container to create a listener More...
 
class  CSSSListener
 
class  CSocketManager
 Best class to use to interact with the sockets. More...
 
class  TSocketManager< T >
 Ease of use templated socket manager. More...
 

Macros

#define CS_STRING   std::string
 
#define CS_DEBUG(f)   (void)0
 
#define CS_EXPORT
 
#define PERROR(f)   (void)0
 
#define CS_INVALID_SOCK   -1
 
#define HAVE_UNIX_SOCKET
 

Typedefs

typedef int cs_sock_t
 
typedef ssize_t cs_ssize_t
 
typedef int(* FPCertVerifyCB) (int, X509_STORE_CTX *)
 

Enumerations

enum  ECompType { CT_NONE = 0 , CT_ZLIB = 1 }
 

Functions

int CS_GetAddrInfo (const CS_STRING &sHostname, Csock *pSock, CSSockAddr &csSockAddr)
 backwards compatible wrapper around CGetAddrInfo and gethostbyname More...
 
int GetCsockSSLIdx ()
 This returns the [ex_]data index position for SSL objects only. More...
 
CsockGetCsockFromCTX (X509_STORE_CTX *pCTX)
 returns the sock object associated to the particular context. returns NULL on failure or if not available More...
 
template<class T >
void CS_Delete (T *&p)
 
void CSAdjustTVTimeout (struct timeval &tv, long iTimeoutMS)
 adjusts tv with a new timeout if iTimeoutMS is smaller More...
 
void SSLErrors (const char *filename, uint32_t iLineNum)
 
bool InitSSL (ECompType eCompressionType=CT_NONE)
 You HAVE to call this in order to use the SSL library, calling InitCsocket() also calls this so unless you need to call InitSSL for a specific reason call InitCsocket() More...
 
bool InitCsocket ()
 This does all the csocket initialized inclusing InitSSL() and win32 specific initializations, only needs to be called once. More...
 
void ShutdownCsocket ()
 Shutdown and release global allocated memory. More...
 
int GetSockError ()
 
void TFD_ZERO (fd_set *set)
 wrappers for FD_SET and such to work in templates. More...
 
void TFD_SET (cs_sock_t iSock, fd_set *set)
 
bool TFD_ISSET (cs_sock_t iSock, fd_set *set)
 
void TFD_CLR (cs_sock_t iSock, fd_set *set)
 
void __Perror (const CS_STRING &s, const char *pszFile, uint32_t iLineNo)
 

Variables

const uint32_t CS_BLOCKSIZE = 4096
 

Detailed Description

Author
Jim Hull csock.nosp@m.et@j.nosp@m.imloc.nosp@m.o.co.nosp@m.m

Copyright (c) 1999-2012 Jim Hull csock.nosp@m.et@j.nosp@m.imloc.nosp@m.o.co.nosp@m.m All rights reserved

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Redistributions in any form must be accompanied by information on how to obtain complete source code for this software and any accompanying software that uses this software. The source code must either be included in the distribution or be available for no more than the cost of distribution plus a nominal fee, and must be freely redistributable under reasonable conditions. For an executable file, complete source code means the source code for all modules it contains. It does not include source code for modules or files that typically accompany the major components of the operating system on which the executable file runs.

THIS SOFTWARE IS PROVIDED `‘AS IS’' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Macro Definition Documentation

◆ CS_DEBUG

#define CS_DEBUG (   f)    (void)0

◆ CS_EXPORT

#define CS_EXPORT

◆ CS_INVALID_SOCK

#define CS_INVALID_SOCK   -1

◆ CS_STRING

#define CS_STRING   std::string

◆ HAVE_UNIX_SOCKET

#define HAVE_UNIX_SOCKET

◆ PERROR

#define PERROR (   f)    (void)0

Typedef Documentation

◆ cs_sock_t

typedef int cs_sock_t

◆ cs_ssize_t

typedef ssize_t cs_ssize_t

◆ FPCertVerifyCB

typedef int( * FPCertVerifyCB) (int, X509_STORE_CTX *)

Enumeration Type Documentation

◆ ECompType

enum ECompType
Enumerator
CT_NONE 
CT_ZLIB 

Function Documentation

◆ __Perror()

void __Perror ( const CS_STRING s,
const char *  pszFile,
uint32_t  iLineNo 
)

◆ CS_Delete()

template<class T >
void CS_Delete ( T *&  p)
inline

◆ CS_GetAddrInfo()

int CS_GetAddrInfo ( const CS_STRING sHostname,
Csock pSock,
CSSockAddr csSockAddr 
)

backwards compatible wrapper around CGetAddrInfo and gethostbyname

◆ CSAdjustTVTimeout()

void CSAdjustTVTimeout ( struct timeval &  tv,
long  iTimeoutMS 
)

adjusts tv with a new timeout if iTimeoutMS is smaller

◆ GetCsockFromCTX()

Csock* GetCsockFromCTX ( X509_STORE_CTX *  pCTX)

returns the sock object associated to the particular context. returns NULL on failure or if not available

◆ GetCsockSSLIdx()

int GetCsockSSLIdx ( )

This returns the [ex_]data index position for SSL objects only.

If you want to tie more data to the SSL object, you should generate your own at application start so as to avoid collision with Csocket SSL_set_ex_data()

◆ GetSockError()

int GetSockError ( )
inline
Todo:
need to make this sock specific via getsockopt

◆ InitCsocket()

bool InitCsocket ( )

This does all the csocket initialized inclusing InitSSL() and win32 specific initializations, only needs to be called once.

◆ InitSSL()

bool InitSSL ( ECompType  eCompressionType = CT_NONE)

You HAVE to call this in order to use the SSL library, calling InitCsocket() also calls this so unless you need to call InitSSL for a specific reason call InitCsocket()

Returns
true on success

◆ ShutdownCsocket()

void ShutdownCsocket ( )

Shutdown and release global allocated memory.

◆ SSLErrors()

void SSLErrors ( const char *  filename,
uint32_t  iLineNum 
)

◆ TFD_CLR()

void TFD_CLR ( cs_sock_t  iSock,
fd_set *  set 
)
inline

◆ TFD_ISSET()

bool TFD_ISSET ( cs_sock_t  iSock,
fd_set *  set 
)
inline

◆ TFD_SET()

void TFD_SET ( cs_sock_t  iSock,
fd_set *  set 
)
inline

◆ TFD_ZERO()

void TFD_ZERO ( fd_set *  set)
inline

wrappers for FD_SET and such to work in templates.

Variable Documentation

◆ CS_BLOCKSIZE

const uint32_t CS_BLOCKSIZE = 4096