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,
202 char*
addr2String(HttpSockaddr* addr,
char* buf,
int len);
208 bool cmpAddr(HttpSockaddr* addr2);
252 int readData(
void* data,
int len,
bool relmutex=
false);
267 int sendData(
const void* data,
int len);
295 CONNECTION_DISPATCHER_OBJ
299 SoDispCon_Execute exec;
301 HttpSocket httpSocket;
304 struct SoDisp* dispatcher;
312#define SoDispCon_socketHasNonBlockDataBitMask 0x01
313#define SoDispCon_hasMoreDataDataBitMask 0x02
315#define SoDispCon_dispatcherHasConDataBitMask 0x04
316#define SoDispCon_recEvActiveDataBitMask 0x08
317#define SoDispCon_sendEvActiveDataBitMask 0x10
318#define SoDispCon_isNonBlockingDataBitMask 0x20
319#define SoDispCon_IP6DataBitMask 0x40
320#define SoDispCon_DGramBitMask 0x80
322#define SoDispCon_setDispHasRecData(o)\
324 (SoDispCon_hasMoreDataDataBitMask | SoDispCon_socketHasNonBlockDataBitMask))
325#define SoDispCon_setDispatcherHasCon(o)\
326 ((o)->dataBits |= SoDispCon_dispatcherHasConDataBitMask)
327#define SoDispCon_setRecEvActive(o)\
328 ((o)->dataBits |= SoDispCon_recEvActiveDataBitMask)
329#define SoDispCon_setSendEvActive(o)\
330 ((o)->dataBits |= SoDispCon_sendEvActiveDataBitMask)
331#define SoDispCon_setIP6(o)\
332 ((o)->dataBits |= SoDispCon_IP6DataBitMask)
334#define SoDispCon_clearSocketHasNonBlockData(o)\
335 ((o)->dataBits &= ~(U8)SoDispCon_socketHasNonBlockDataBitMask)
336#define SoDispCon_clearHasMoreData(o)\
337 ((o)->dataBits &= ~(U8)SoDispCon_hasMoreDataDataBitMask)
338#define SoDispCon_clearDispatcherHasCon(o)\
339 ((o)->dataBits &= ~(U8)SoDispCon_dispatcherHasConDataBitMask)
340#define SoDispCon_setRecEvInactive(o)\
341 ((o)->dataBits &= ~(U8)SoDispCon_recEvActiveDataBitMask)
342#define SoDispCon_setSendEvInactive(o)\
343 ((o)->dataBits &= ~(U8)SoDispCon_sendEvActiveDataBitMask)
344#define SoDispCon_clearIP6(o)\
345 ((o)->dataBits &= ~(U8)SoDispCon_IP6DataBitMask)
349#define SoDispCon_socketHasNonBlockData(o)\
350 (((o)->dataBits & SoDispCon_socketHasNonBlockDataBitMask) ? TRUE : FALSE)
353#define SoDispCon_hasMoreData(o)\
354 (((o)->dataBits & SoDispCon_hasMoreDataDataBitMask) ? TRUE : FALSE)
357#define SoDispCon_dispatcherHasCon(o)\
358 (((o)->dataBits & SoDispCon_dispatcherHasConDataBitMask)?TRUE:FALSE)
361#define SoDispCon_recEvActive(o)\
362 (((o)->dataBits & SoDispCon_recEvActiveDataBitMask)?TRUE:FALSE)
365#define SoDispCon_sendEvActive(o)\
366 (((o)->dataBits & SoDispCon_sendEvActiveDataBitMask)?TRUE:FALSE)
369#define SoDispCon_isNonBlocking(o)\
370 (((o)->dataBits & SoDispCon_isNonBlockingDataBitMask) ? TRUE : FALSE)
371#ifndef SoDispCon_isIP6
374#define SoDispCon_isIP6(o)\
375 (((o)->dataBits & SoDispCon_IP6DataBitMask) ? TRUE : FALSE)
378#define SoDispCon_isDGRAM(o) \
379 (((o)->dataBits & SoDispCon_DGramBitMask) ? TRUE : FALSE)
385#define SoDispCon_isSecure(o) \
386 ((o)->exec(o,0,SoDispCon_GetSharkSslCon,0,0) > 0)
393#define SoDispCon_getSharkSslCon(o,sharkSslConPtrPtr) \
394 (o)->exec(o,0,SoDispCon_GetSharkSslCon,sharkSslConPtrPtr,0)
397#define SoDispCon_isValid(o) HttpSocket_isValid(&(o)->httpSocket)
398#define SoDispCon_invalidate(o) HttpSocket_invalidate(&(o)->httpSocket)
401#define SoDispCon_getDispatcher(o) (o)->dispatcher
402#define SoDispCon_dispRecEvent(o) (o)->dispRecEv(o)
403#define SoDispCon_dispSendEvent(o) (o)->dispSendEv(o)
407#define SoDispCon_setDispSendEvent(o, dispSendEvFp) \
408 (o)->dispSendEv=dispSendEvFp
413#define SoDispCon_setDispRecEvent(o, dispRecEvFp) \
414 (o)->dispRecEv=dispRecEvFp
418#define SoDispCon_readData(o, data, len, relmutex) \
419 (o)->exec(o, (relmutex) ? SoDisp_getMutex((o)->dispatcher) : 0, \
420 SoDispCon_ExTypeRead,data,len)
428#ifndef SoDispCon_newConnectionIsReady
429#define SoDispCon_newConnectionIsReady(con)
452BA_API
int SoDispCon_upgrade(
SoDispCon* o,
struct SharkSsl* ssl,
453 const char* alpn,
const char* host,
int port);
489#define SoDispCon_asyncReady(o)\
490 (o)->exec(o,0,SoDispCon_ExTypeAsyncReady,0,0)
493#define SoDispCon_asyncSend(o, len) \
494 (o)->exec(o,0,SoDispCon_ExTypeAsyncReady,0,len)
508BA_API
void SoDispCon_releaseAsyncBuf(
SoDispCon* con);
509BA_API
void SoDispCon_internalAllocAsynchBuf(
510 SoDispCon* con, AllocAsynchBufArgs* args);
528#define SoDispCon_destructor(o) SoDispCon_zzCloseCon(o,1)
532#define SoDispCon_hardClose(o) SoDispCon_zzCloseCon(o, 2)
536#define SoDispCon_shutdown(o) SoDispCon_zzCloseCon(o, 1)
540#define SoDispCon_closeCon(o) SoDispCon_zzCloseCon(o, 0)
547#define SoDispCon_setReadTmo(o,timeout) (o)->rtmo = (U16)((timeout)/50)
548BA_API
void SoDispCon_zzCloseCon(
SoDispCon* o,
int shutdown);
561 SoDispCon* o, HttpSockaddr* addr,
char* buf,
int len);
565BA_API
void SoDispCon_printSockErr(
566 SoDispCon* o,
const char* type,HttpSocket* s,
int status);
569#define SoDispCon_getId(o) HttpSocket_getId(&(o)->httpSocket)
571#ifndef SoDispCon_platReadData
573 void* data,
int len);
582 const void* bindIntfName,
587#if BA_HAVE_SOCKET_WRITE_EVENTS
609 const void* bindIntfName,
617BA_API
int SoDispCon_asyncConnectNext(
SoDispCon* o);
618#if BA_USE_GETADDRINFO
623BA_API
void SoDispCon_asyncConnectRelease(
SoDispCon* o);
625#define SoDispCon_asyncConnectRelease(o)
683 const void* bindIntfName,
689 dgram?TRUE:FALSE, ipv6?TRUE:FALSE,errinfo);
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:413
#define SoDispCon_asyncSend(o, len)
Begin or advance a send from the transport's asynchronous buffer.
Definition: SoDispCon.h:493
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:407
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:418
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:361
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.
#define SoDispCon_isIP6(o)
Definition: SoDispCon.h:374
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:353
#define SoDispCon_dispatcherHasCon(o)
Definition: SoDispCon.h:357
#define SoDispCon_isSecure(o)
Test a successfully installed transport for TLS.
Definition: SoDispCon.h:385
#define SoDispCon_isValid(o)
Definition: SoDispCon.h:397
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:365
#define SoDispCon_getSharkSslCon(o, sharkSslConPtrPtr)
Inspect a successfully installed transport.
Definition: SoDispCon.h:393
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:401
BA_API int SoDispCon_setNonblocking(SoDispCon *o)
Select nonblocking socket mode.
uint16_t U16
Unsigned 16-bit integer.
Definition: GenPrimT.h:94
uint32_t U32
Unsigned 32-bit integer.
Definition: GenPrimT.h:96
uint8_t U8
Unsigned 8-bit integer.
Definition: GenPrimT.h:92
U8 BaBool
Boolean stored in an unsigned byte; FALSE is zero and TRUE is one.
Definition: GenPrimT.h:121
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:681
int setBlocking()
Select blocking socket mode.
Definition: SoDispCon.h:635
struct SoDisp * getDispatcher()
Definition: SoDispCon.h:665
int asyncSend(int len)
Begin or advance a send from the transport's asynchronous buffer.
Definition: SoDispCon.h:673
SoDispCon()
Uninitialized storage; call SoDispCon_constructor before use.
Definition: SoDispCon.h:125
bool isIP6()
Definition: SoDispCon.h:641
bool isValid()
Definition: SoDispCon.h:643
bool isSecure()
Deprecated: Use getSharkSslCon(NULL).
Definition: SoDispCon.h:637
int sendChunkData(const void *data, int len)
Send one HTTP chunk, including its hexadecimal size and CRLF delimiters.
Definition: SoDispCon.h:675
bool sendEvActive()
Definition: SoDispCon.h:663
void setDispRecEvent(SoDispCon_DispRecEv ev)
Install a receive callback before enabling receive events.
Definition: SoDispCon.h:669
char * addr2String(HttpSockaddr *addr, char *buf, int len)
Format a numeric address without a port number.
Definition: SoDispCon.h:649
bool cmpAddr(HttpSockaddr *addr2)
Compare an address with the current peer address, ignoring port numbers.
Definition: SoDispCon.h:651
bool getSharkSslCon(SharkSslCon **sc)
Inspect a connected transport's TLS implementation.
Definition: SoDispCon.h:639
void setTCPNoDelay(bool enable)
Disable the TCP delay.
Definition: SoDispCon.h:654
bool hasMoreData()
Definition: SoDispCon.h:656
void * allocAsynchBuf(int *size)
Obtain transport-owned writable storage for asynchronous sending.
Definition: SoDispCon.h:679
int asyncReady()
Advance pending output and inspect completion.
Definition: SoDispCon.h:677
int readData(void *data, int len, bool relmutex=false)
Read through the installed transport using its recorded readiness.
Definition: SoDispCon.h:631
bool recEvActive()
Definition: SoDispCon.h:661
int sendData(const void *data, int len)
Send an entire buffer through the installed transport.
Definition: SoDispCon.h:671
int getSockName(HttpSockaddr *addr, U16 *port=0)
Read the local socket endpoint.
Definition: SoDispCon.h:647
void setDispSendEvent(SoDispCon_DispSendEv ev)
Install a send-ready callback before enabling send events.
Definition: SoDispCon.h:667
int setNonblocking()
Select nonblocking socket mode.
Definition: SoDispCon.h:633
bool dispatcherHasCon()
Definition: SoDispCon.h:659
int getPeerName(HttpSockaddr *addr, U16 *port=0)
Read the remote peer endpoint.
Definition: SoDispCon.h:645
The SoDisp dispatches any socket connection that contains data by calling the SoDispCon::execute memb...
Definition: SoDisp.h:97
A mutual exclusion class.
Definition: ThreadLib.h:196