static PHB_SOCKEX s_sockexNew( HB_SOCKET sd, PHB_ITEM pParams ) { PHB_SOCKEX pSock; HB_BOOL fServer = HB_FALSE; HB_MAXINT timeout = -1; SSL * ssl = NULL; if( pParams && HB_IS_HASH( pParams ) ) { PHB_ITEM pItem; if( ssl == NULL && ( pItem = hb_hashGetCItemPtr( pParams, "ssl" ) ) != NULL ) ssl = hb_SSL_itemGet( pItem ); if( ssl == NULL && ( pItem = hb_hashGetCItemPtr( pParams, "ctx" ) ) != NULL ) ssl = hb_SSL_itemGet( pItem ); if( ssl == NULL && ( pItem = hb_hashGetCItemPtr( pParams, "key" ) ) != NULL ) ssl = hb_SSL_itemGet( pItem ); if( ( pItem = hb_hashGetCItemPtr( pParams, "timeout" ) ) != NULL && HB_IS_NUMERIC( pItem ) ) timeout = hb_itemGetNInt( pItem ); if( ( pItem = hb_hashGetCItemPtr( pParams, "server" ) ) != NULL && HB_IS_LOGICAL( pItem ) ) fServer = hb_itemGetL( pItem ); else if( ( pItem = hb_hashGetCItemPtr( pParams, "client" ) ) != NULL && HB_IS_LOGICAL( pItem ) ) fServer = ! hb_itemGetL( pItem ); } pSock = hb_sockexNewSSL( sd, ssl, fServer, timeout ); if( pSock ) hb_socekxParamsInit( pSock, pParams ); return pSock; }
/* create new extended socket structure */ static PHB_SOCKEX s_sockexNew( HB_SOCKET sd, PHB_ITEM pParams ) { PHB_SOCKEX pSock; pSock = ( PHB_SOCKEX ) hb_xgrabz( sizeof( HB_SOCKEX ) ); pSock->sd = sd; pSock->pFilter = &s_sockFilter; hb_socekxParamsInit( pSock, pParams ); return pSock; }
static PHB_SOCKEX s_sockexNew( HB_SOCKET sd, PHB_ITEM pParams ) { PHB_SOCKEX pSock; const void * keydata = NULL; int keylen = 0, level = HB_ZLIB_COMPRESSION_DEFAULT, strategy = HB_ZLIB_STRATEGY_DEFAULT; hb_socekxParamsGetStd( pParams, &keydata, &keylen, NULL, NULL, &level, &strategy ); pSock = hb_sockexNewZNet( sd, keydata, keylen, level, strategy ); if( pSock ) hb_socekxParamsInit( pSock, pParams ); return pSock; }
static PHB_SOCKEX s_sockexNext( PHB_SOCKEX pSock, PHB_ITEM pParams ) { PHB_SOCKEX pSockNew = NULL; if( pSock ) { const void * keydata = NULL, * iv = NULL; int keylen = 0, ivlen = 0; hb_socekxParamsGetStd( pParams, &keydata, &keylen, &iv, &ivlen, NULL, NULL ); if( keylen > 0 ) { PHB_SOCKEX_BF pBF = ( PHB_SOCKEX_BF ) hb_xgrabz( sizeof( HB_SOCKEX_BF ) ); const HB_BYTE * pVect = ( const HB_BYTE * ) ( ivlen > 0 ? iv : NULL ); int i; hb_blowfishInit( &pBF->bf, keydata, keylen ); for( i = 0; i < HB_BF_CIPHERBLOCK; ++i ) { if( pVect && ivlen > 0 ) pBF->encounter[ i ] = pBF->decounter[ i ] = pVect[ i % ivlen ]; else pBF->encounter[ i ] = pBF->decounter[ i ] = ( HB_BYTE ) i; } pSockNew = ( PHB_SOCKEX ) hb_xgrabz( sizeof( HB_SOCKEX ) ); pSockNew->sd = pSock->sd; pSockNew->fRedirAll = HB_TRUE; pSockNew->fShutDown = pSock->fShutDown; pSockNew->iAutoFlush = pSock->iAutoFlush; pSockNew->pFilter = &s_sockFilter; pSockNew->cargo = ( void * ) pBF; pBF->sock = pSock; hb_socekxParamsInit( pSockNew, pParams ); } } return pSockNew; }
static PHB_SOCKEX s_sockexNext( PHB_SOCKEX pSock, PHB_ITEM pParams ) { PHB_SOCKEX pSockNew = NULL; if( pSock ) { HB_BOOL fDecompressIn = HB_TRUE, fCompressOut = HB_TRUE; int level = HB_ZLIB_COMPRESSION_DEFAULT, strategy = HB_ZLIB_STRATEGY_DEFAULT, windowBitsIn = MAX_WBITS, windowBitsOut = MAX_WBITS; if( pParams && HB_IS_HASH( pParams ) ) { PHB_ITEM pItem; if( ( pItem = hb_hashGetCItemPtr( pParams, "zlib" ) ) != NULL && HB_IS_NUMERIC( pItem ) ) level = hb_itemGetNI( pItem ); if( ( pItem = hb_hashGetCItemPtr( pParams, "zs" ) ) != NULL && HB_IS_NUMERIC( pItem ) ) strategy = hb_itemGetNI( pItem ); if( ( pItem = hb_hashGetCItemPtr( pParams, "gzin" ) ) != NULL && HB_IS_LOGICAL( pItem ) ) { fDecompressIn = hb_itemGetL( pItem ); if( fDecompressIn ) windowBitsIn += 16; } if( ( pItem = hb_hashGetCItemPtr( pParams, "zin" ) ) != NULL && HB_IS_LOGICAL( pItem ) ) { if( windowBitsIn == MAX_WBITS ) fDecompressIn = hb_itemGetL( pItem ); else if( hb_itemGetL( pItem ) ) windowBitsIn += 16; } if( ( pItem = hb_hashGetCItemPtr( pParams, "gzout" ) ) != NULL && HB_IS_LOGICAL( pItem ) ) { fCompressOut = hb_itemGetL( pItem ); if( fCompressOut ) windowBitsOut += 16; } if( ( pItem = hb_hashGetCItemPtr( pParams, "zout" ) ) != NULL && HB_IS_LOGICAL( pItem ) && windowBitsOut == MAX_WBITS ) fCompressOut = hb_itemGetL( pItem ); } if( level != HB_ZLIB_COMPRESSION_DISABLE && ( fDecompressIn || fCompressOut ) ) { PHB_SOCKEX_Z pZ = ( PHB_SOCKEX_Z ) hb_xgrabz( sizeof( HB_SOCKEX_Z ) ); pSockNew = ( PHB_SOCKEX ) hb_xgrabz( sizeof( HB_SOCKEX ) ); pSockNew->sd = HB_NO_SOCKET; pSockNew->fRedirAll = HB_TRUE; pSockNew->pFilter = &s_sockFilter; pSockNew->cargo = ( void * ) pZ; pZ->z_read.zalloc = s_zsock_zalloc; pZ->z_read.zfree = s_zsock_zfree; pZ->z_read.opaque = Z_NULL; pZ->z_write.zalloc = s_zsock_zalloc; pZ->z_write.zfree = s_zsock_zfree; pZ->z_write.opaque = Z_NULL; pZ->z_read.next_in = NULL; pZ->z_read.avail_in = 0; if( level != Z_DEFAULT_COMPRESSION && !( level >= Z_NO_COMPRESSION && level <= Z_BEST_COMPRESSION ) ) level = Z_DEFAULT_COMPRESSION; if( strategy != Z_FILTERED && #if defined( Z_RLE ) strategy != Z_RLE && #endif #if defined( Z_FIXED ) strategy != Z_FIXED && #endif strategy != Z_HUFFMAN_ONLY ) strategy = Z_DEFAULT_STRATEGY; if( fDecompressIn && level != HB_ZLIB_COMPRESSION_DISABLE ) { /* MAX_WBITS=15, decompression - support for formats: * -15: raw, 15: ZLIB, 31: GZIP, 47: ZLIB+GZIP */ if( inflateInit2( &pZ->z_read, windowBitsIn ) == Z_OK ) { pZ->fDecompressIn = HB_TRUE; pZ->rdbuf = ( HB_BYTE * ) hb_xgrab( HB_ZSOCK_RDBUFSIZE ); } else level = HB_ZLIB_COMPRESSION_DISABLE; } if( fCompressOut && level != HB_ZLIB_COMPRESSION_DISABLE ) { /* MAX_WBITS=15, compression format: * -15: raw, 15: ZLIB (+6 bytes), 31: GZIP(+18 bytes) */ if( deflateInit2( &pZ->z_write, level, Z_DEFLATED, windowBitsOut, HB_ZSOCK_MEM_LEVEL, strategy ) == Z_OK ) { pZ->fCompressOut = HB_TRUE; pZ->wrbuf = ( HB_BYTE * ) hb_xgrab( HB_ZSOCK_WRBUFSIZE ); pZ->z_write.next_out = ( Bytef * ) pZ->wrbuf; pZ->z_write.avail_out = HB_ZSOCK_WRBUFSIZE; } else level = HB_ZLIB_COMPRESSION_DISABLE; } if( level != HB_ZLIB_COMPRESSION_DISABLE ) { pSockNew->sd = pSock->sd; pSockNew->fShutDown = pSock->fShutDown; pSockNew->iAutoFlush = pSock->iAutoFlush; pZ->sock = pSock; hb_socekxParamsInit( pSockNew, pParams ); } else { s_sockexClose( pSockNew, HB_FALSE ); pSockNew = NULL; } } } return pSockNew; }