72 SoDispCon_ExTypeRead=1,
73 SoDispCon_ExTypeWrite,
74 SoDispCon_GetSharkSslCon,
75 SoDispCon_ExTypeClose,
76 SoDispCon_ExTypeMoveCon,
77 SoDispCon_ExTypeAllocAsynchBuf,
78 SoDispCon_ExTypeAsyncReady,
101typedef int (*SoDispCon_Execute)(
122 void *
operator new(size_t,
void *place) {
return place; }
123 void operator delete(
void*,
void *) { }
150 const void* bindIntfName=0,
201 char*
addr2String(HttpSockaddr* addr,
char* buf,
int len);
207 bool cmpAddr(HttpSockaddr* addr2);
251 int readData(
void* data,
int len,
bool relmutex=
false);
266 int sendData(
const void* data,
int len);
294 CONNECTION_DISPATCHER_OBJ
298 SoDispCon_Execute exec;
300 HttpSocket httpSocket;
303 struct SoDisp* dispatcher;
311#define SoDispCon_socketHasNonBlockDataBitMask 0x01
312#define SoDispCon_hasMoreDataDataBitMask 0x02
314#define SoDispCon_dispatcherHasConDataBitMask 0x04
315#define SoDispCon_recEvActiveDataBitMask 0x08
316#define SoDispCon_sendEvActiveDataBitMask 0x10
317#define SoDispCon_isNonBlockingDataBitMask 0x20
318#define SoDispCon_IP6DataBitMask 0x40
319#define SoDispCon_DGramBitMask 0x80
321#define SoDispCon_setDispHasRecData(o)\
323 (SoDispCon_hasMoreDataDataBitMask | SoDispCon_socketHasNonBlockDataBitMask))
324#define SoDispCon_setDispatcherHasCon(o)\
325 ((o)->dataBits |= SoDispCon_dispatcherHasConDataBitMask)
326#define SoDispCon_setRecEvActive(o)\
327 ((o)->dataBits |= SoDispCon_recEvActiveDataBitMask)
328#define SoDispCon_setSendEvActive(o)\
329 ((o)->dataBits |= SoDispCon_sendEvActiveDataBitMask)
330#define SoDispCon_setIP6(o)\
331 ((o)->dataBits |= SoDispCon_IP6DataBitMask)
333#define SoDispCon_clearSocketHasNonBlockData(o)\
334 ((o)->dataBits &= ~(U8)SoDispCon_socketHasNonBlockDataBitMask)
335#define SoDispCon_clearHasMoreData(o)\
336 ((o)->dataBits &= ~(U8)SoDispCon_hasMoreDataDataBitMask)
337#define SoDispCon_clearDispatcherHasCon(o)\
338 ((o)->dataBits &= ~(U8)SoDispCon_dispatcherHasConDataBitMask)
339#define SoDispCon_setRecEvInactive(o)\
340 ((o)->dataBits &= ~(U8)SoDispCon_recEvActiveDataBitMask)
341#define SoDispCon_setSendEvInactive(o)\
342 ((o)->dataBits &= ~(U8)SoDispCon_sendEvActiveDataBitMask)
343#define SoDispCon_clearIP6(o)\
344 ((o)->dataBits &= ~(U8)SoDispCon_IP6DataBitMask)
348#define SoDispCon_socketHasNonBlockData(o)\
349 (((o)->dataBits & SoDispCon_socketHasNonBlockDataBitMask) ? TRUE : FALSE)
352#define SoDispCon_hasMoreData(o)\
353 (((o)->dataBits & SoDispCon_hasMoreDataDataBitMask) ? TRUE : FALSE)
356#define SoDispCon_dispatcherHasCon(o)\
357 (((o)->dataBits & SoDispCon_dispatcherHasConDataBitMask)?TRUE:FALSE)
360#define SoDispCon_recEvActive(o)\
361 (((o)->dataBits & SoDispCon_recEvActiveDataBitMask)?TRUE:FALSE)
364#define SoDispCon_sendEvActive(o)\
365 (((o)->dataBits & SoDispCon_sendEvActiveDataBitMask)?TRUE:FALSE)
368#define SoDispCon_isNonBlocking(o)\
369 (((o)->dataBits & SoDispCon_isNonBlockingDataBitMask) ? TRUE : FALSE)
370#ifndef SoDispCon_isIP6
373#define SoDispCon_isIP6(o)\
374 (((o)->dataBits & SoDispCon_IP6DataBitMask) ? TRUE : FALSE)
377#define SoDispCon_isDGRAM(o) \
378 (((o)->dataBits & SoDispCon_DGramBitMask) ? TRUE : FALSE)
384#define SoDispCon_isSecure(o) \
385 ((o)->exec(o,0,SoDispCon_GetSharkSslCon,0,0) > 0)
392#define SoDispCon_getSharkSslCon(o,sharkSslConPtrPtr) \
393 (o)->exec(o,0,SoDispCon_GetSharkSslCon,sharkSslConPtrPtr,0)
396#define SoDispCon_isValid(o) HttpSocket_isValid(&(o)->httpSocket)
397#define SoDispCon_invalidate(o) HttpSocket_invalidate(&(o)->httpSocket)
400#define SoDispCon_getDispatcher(o) (o)->dispatcher
401#define SoDispCon_dispRecEvent(o) (o)->dispRecEv(o)
402#define SoDispCon_dispSendEvent(o) (o)->dispSendEv(o)
406#define SoDispCon_setDispSendEvent(o, dispSendEvFp) \
407 (o)->dispSendEv=dispSendEvFp
412#define SoDispCon_setDispRecEvent(o, dispRecEvFp) \
413 (o)->dispRecEv=dispRecEvFp
417#define SoDispCon_readData(o, data, len, relmutex) \
418 (o)->exec(o, (relmutex) ? SoDisp_getMutex((o)->dispatcher) : 0, \
419 SoDispCon_ExTypeRead,data,len)
427#ifndef SoDispCon_newConnectionIsReady
428#define SoDispCon_newConnectionIsReady(con)
451BA_API
int SoDispCon_upgrade(
SoDispCon* o,
struct SharkSsl* ssl,
452 const char* alpn,
const char* host,
int port);
488#define SoDispCon_asyncReady(o)\
489 (o)->exec(o,0,SoDispCon_ExTypeAsyncReady,0,0)
492#define SoDispCon_asyncSend(o, len) \
493 (o)->exec(o,0,SoDispCon_ExTypeAsyncReady,0,len)
507BA_API
void SoDispCon_releaseAsyncBuf(
SoDispCon* con);
508BA_API
void SoDispCon_internalAllocAsynchBuf(
509 SoDispCon* con, AllocAsynchBufArgs* args);
527#define SoDispCon_destructor(o) SoDispCon_zzCloseCon(o,1)
531#define SoDispCon_hardClose(o) SoDispCon_zzCloseCon(o, 2)
535#define SoDispCon_shutdown(o) SoDispCon_zzCloseCon(o, 1)
539#define SoDispCon_closeCon(o) SoDispCon_zzCloseCon(o, 0)
546#define SoDispCon_setReadTmo(o,timeout) (o)->rtmo = (U16)((timeout)/50)
547BA_API
void SoDispCon_zzCloseCon(
SoDispCon* o,
int shutdown);
560 SoDispCon* o, HttpSockaddr* addr,
char* buf,
int len);
564BA_API
void SoDispCon_printSockErr(
565 SoDispCon* o,
const char* type,HttpSocket* s,
int status);
568#define SoDispCon_getId(o) HttpSocket_getId(&(o)->httpSocket)
570#ifndef SoDispCon_platReadData
572 void* data,
int len);
581 const void* bindIntfName,
586#ifndef NO_ASYNCH_RESP
608 const void* bindIntfName,
622BA_API
void SoDispCon_asyncConnectRelease(
SoDispCon* o);
624#define SoDispCon_asyncConnectRelease(o)
682 const void* bindIntfName,
688 dgram?TRUE:FALSE, ipv6?TRUE:FALSE,errinfo);
BA_API int SoDispCon_asyncConnect(SoDispCon *o, const char *host, U16 port, const void *bindIntfName, BaBool ipv6, char **errinfo)
Begin a TCP connection without waiting for TCP establishment.
BA_API int SoDispCon_setBlocking(SoDispCon *o)
Select blocking socket mode.
#define SoDispCon_setDispRecEvent(o, dispRecEvFp)
Install the receive callback before enabling events.
Definition: SoDispCon.h:412
#define SoDispCon_asyncSend(o, len)
Begin or advance a send from the transport's asynchronous buffer.
Definition: SoDispCon.h:492
BA_API int SoDispCon_sendDataX(SoDispCon *o, const void *data, int len)
Send all bytes without releasing the dispatcher mutex.
BA_API int SoDispCon_blockRead(SoDispCon *o, void *data, int len)
Wait for input using a blocking connection.
#define SoDispCon_setDispSendEvent(o, dispSendEvFp)
Install the send-ready callback before enabling events.
Definition: SoDispCon.h:406
BA_API void SoDispCon_setTCPNoDelay(SoDispCon *o, int enable)
Disable the TCP delay.
#define SoDispCon_readData(o, data, len, relmutex)
Read through the installed transport using its recorded readiness.
Definition: SoDispCon.h:417
BA_API int SoDispCon_sendDataNT(SoDispCon *o, const void *data, int len)
Send all bytes with the sendData contract, but omit body tracing.
BA_API int SoDispCon_sendData(SoDispCon *o, const void *data, int len)
Send an entire buffer through the installed transport.
#define SoDispCon_recEvActive(o)
Definition: SoDispCon.h:360
BA_API int SoDispCon_connect(SoDispCon *o, const char *host, U16 port, const void *bindIntfName, U16 bindPort, U32 timeout, BaBool dgram, BaBool ipv6, char **errinfo)
Connect an initialized, empty connection to a remote endpoint.
BA_API BaBool SoDispCon_cmpAddr(SoDispCon *o, HttpSockaddr *addr2)
Compare an address with the current peer address, ignoring port numbers.
BA_API int SoDispCon_asyncConnectNext(SoDispCon *o)
Try the next resolved address after a failed pending connection.
#define SoDispCon_isIP6(o)
Definition: SoDispCon.h:373
void(* SoDispCon_DispSendEv)(struct SoDispCon *con)
Dispatcher send-ready notification, invoked with its mutex held.
Definition: SoDispCon.h:112
void(* SoDispCon_DispRecEv)(struct SoDispCon *con)
Dispatcher receive notification, invoked with its mutex held.
Definition: SoDispCon.h:108
BA_API int SoDispCon_moveCon(SoDispCon *o, SoDispCon *newCon)
Move socket and transport ownership without copying object storage.
BA_API void * SoDispCon_allocAsynchBuf(SoDispCon *o, int *size)
Obtain transport-owned writable storage for asynchronous sending.
BA_API void SoDispCon_constructor(SoDispCon *o, struct SoDisp *dispatcher, SoDispCon_DispRecEv e)
Initialize an empty connection without opening a socket.
#define SoDispCon_hasMoreData(o)
Definition: SoDispCon.h:352
#define SoDispCon_dispatcherHasCon(o)
Definition: SoDispCon.h:356
#define SoDispCon_isSecure(o)
Test a successfully installed transport for TLS.
Definition: SoDispCon.h:384
#define SoDispCon_isValid(o)
Definition: SoDispCon.h:396
BA_API int SoDispCon_getSockName(SoDispCon *o, HttpSockaddr *addr, U16 *port)
Read the local socket endpoint.
BA_API char * SoDispCon_addr2String(SoDispCon *o, HttpSockaddr *addr, char *buf, int len)
Format a numeric address without a port number.
#define SoDispCon_sendEvActive(o)
Definition: SoDispCon.h:364
#define SoDispCon_getSharkSslCon(o, sharkSslConPtrPtr)
Inspect a successfully installed transport.
Definition: SoDispCon.h:392
BA_API int SoDispCon_sendChunkData(SoDispCon *o, const void *data, int len)
Send one HTTP chunk, including its hexadecimal size and CRLF delimiters.
BA_API int SoDispCon_getSharkAlert(SoDispCon *o, U8 *alertLevel, U8 *alertDescription)
Read the current SharkSSL alert fields.
struct SoDispCon SoDispCon
Contains information about the physical socket connection.
BA_API int SoDispCon_asyncReadyF(SoDispCon *o)
Advance asynchronous sending; same status contract as SoDispCon_asyncReady.
BA_API int SoDispCon_getPeerName(SoDispCon *o, HttpSockaddr *addr, U16 *port)
Read the remote peer endpoint.
#define SoDispCon_getDispatcher(o)
Definition: SoDispCon.h:400
BA_API int SoDispCon_setNonblocking(SoDispCon *o)
Select nonblocking socket mode.
uint16_t U16
Unsigned 16-bit integer.
Definition: GenPrimT.h:91
uint32_t U32
Unsigned 32-bit integer.
Definition: GenPrimT.h:93
uint8_t U8
Unsigned 8-bit integer.
Definition: GenPrimT.h:89
U8 BaBool
Boolean stored in an unsigned byte; FALSE is zero and TRUE is one.
Definition: GenPrimT.h:118
Memory allocation and deallocation Interface class.
Definition: AllocatorIntf.h:98
Contains information about the physical socket connection.
Definition: SoDispCon.h:120
int connect(const char *host, U16 port, const void *bindIntfName=0, U16 bindPort=0, U32 timeout=1500, BaBool dgram=false, BaBool ipv6=false, char **errinfo=0)
Connect an initialized, empty connection to a remote endpoint.
Definition: SoDispCon.h:680
int setBlocking()
Select blocking socket mode.
Definition: SoDispCon.h:634
struct SoDisp * getDispatcher()
Definition: SoDispCon.h:664
int asyncSend(int len)
Begin or advance a send from the transport's asynchronous buffer.
Definition: SoDispCon.h:672
SoDispCon()
Uninitialized storage; call SoDispCon_constructor before use.
Definition: SoDispCon.h:125
bool isIP6()
Definition: SoDispCon.h:640
bool isValid()
Definition: SoDispCon.h:642
bool isSecure()
Deprecated: Use getSharkSslCon(NULL).
Definition: SoDispCon.h:636
int sendChunkData(const void *data, int len)
Send one HTTP chunk, including its hexadecimal size and CRLF delimiters.
Definition: SoDispCon.h:674
bool sendEvActive()
Definition: SoDispCon.h:662
void setDispRecEvent(SoDispCon_DispRecEv ev)
Install a receive callback before enabling receive events.
Definition: SoDispCon.h:668
char * addr2String(HttpSockaddr *addr, char *buf, int len)
Format a numeric address without a port number.
Definition: SoDispCon.h:648
bool cmpAddr(HttpSockaddr *addr2)
Compare an address with the current peer address, ignoring port numbers.
Definition: SoDispCon.h:650
bool getSharkSslCon(SharkSslCon **sc)
Inspect a connected transport's TLS implementation.
Definition: SoDispCon.h:638
void setTCPNoDelay(bool enable)
Disable the TCP delay.
Definition: SoDispCon.h:653
bool hasMoreData()
Definition: SoDispCon.h:655
void * allocAsynchBuf(int *size)
Obtain transport-owned writable storage for asynchronous sending.
Definition: SoDispCon.h:678
int asyncReady()
Advance pending output and inspect completion.
Definition: SoDispCon.h:676
int readData(void *data, int len, bool relmutex=false)
Read through the installed transport using its recorded readiness.
Definition: SoDispCon.h:630
bool recEvActive()
Definition: SoDispCon.h:660
int sendData(const void *data, int len)
Send an entire buffer through the installed transport.
Definition: SoDispCon.h:670
int getSockName(HttpSockaddr *addr, U16 *port=0)
Read the local socket endpoint.
Definition: SoDispCon.h:646
void setDispSendEvent(SoDispCon_DispSendEv ev)
Install a send-ready callback before enabling send events.
Definition: SoDispCon.h:666
int setNonblocking()
Select nonblocking socket mode.
Definition: SoDispCon.h:632
bool dispatcherHasCon()
Definition: SoDispCon.h:658
int getPeerName(HttpSockaddr *addr, U16 *port=0)
Read the remote peer endpoint.
Definition: SoDispCon.h:644
The SoDisp dispatches any socket connection that contains data by calling the SoDispCon::execute memb...
Definition: SoDisp.h:91
A mutual exclusion class.
Definition: ThreadLib.h:196