//expand the recieved data to base64 encode int l4recv1(lsi_cb_param_t *rec) { #define PLAIN_BLOCK_SIZE 600 #define ENCODE_BLOCK_SIZE (PLAIN_BLOCK_SIZE * 4 / 3 + 1) MyData *myData = NULL; char *pBegin; char tmpBuf[ENCODE_BLOCK_SIZE]; int len, sz; myData = (MyData *)g_api->get_module_data(rec->_session, &MNAME, LSI_MODULE_DATA_L4); if (!myData) return LS_FAIL; while ((len = g_api->stream_read_next(rec, tmpBuf, ENCODE_BLOCK_SIZE)) > 0) { g_api->log(NULL, LSI_LOG_DEBUG, "#### updatetcpin1 test l4recv, inLn = %d\n", len); ls_loopbuf_append(&myData->inBuf, tmpBuf, len); } while (!ls_loopbuf_empty(&myData->inBuf)) { ls_loopbuf_straight(&myData->inBuf); pBegin = ls_loopbuf_begin(&myData->inBuf); sz = ls_loopbuf_size(&myData->inBuf); if (sz > PLAIN_BLOCK_SIZE) sz = PLAIN_BLOCK_SIZE; len = ls_base64_encode((const char *)pBegin, sz, tmpBuf); if (len > 0) { ls_loopbuf_append(&myData->outBuf, tmpBuf, len); ls_loopbuf_popfront(&myData->inBuf, sz); } else break; } //////////////////////////////////////////////////////////////////////////////// if (ls_loopbuf_size(&myData->outBuf) < rec->_param_len) rec->_param_len = ls_loopbuf_size(&myData->outBuf); if (rec->_param_len > 0) ls_loopbuf_moveto(&myData->outBuf, (char *)rec->_param, rec->_param_len); return rec->_param_len; }
int SslOcspStapling::createRequest() { int len, len64, n1; unsigned char *pReqData, *pReqData64; unsigned char ReqData[4000], ReqData64[4000]; struct stat st; if (::stat(m_sRespfileTmp.c_str(), &st) == 0) return 0; pReqData = ReqData; pReqData64 = ReqData64; len = getRequestData(pReqData); if (len <= 0) return LS_FAIL; len64 = ls_base64_encode((const char *)ReqData, len, (char *)pReqData64); const char *pUrl = m_sOcspResponder.c_str(); memcpy(pReqData, pUrl, m_sOcspResponder.len()); pReqData += m_sOcspResponder.len(); if (pUrl[m_sOcspResponder.len() - 1] != '/') *pReqData++ = '/'; n1 = escapeBase64Uri(pReqData64, len64, pReqData); pReqData += n1; *pReqData = 0; len = pReqData - ReqData; if (m_pHttpFetch != NULL) delete m_pHttpFetch; m_pHttpFetch = new HttpFetch(); m_pHttpFetch->setResProcessor(OcspRespCb, this); m_pHttpFetch->setTimeout(30); //Set Req timeout as 30 seconds m_pHttpFetch->startReq((const char *)ReqData, 1, 1, NULL, 0, m_sRespfileTmp.c_str(), NULL, m_addrResponder); setLastErrMsg("%lu, len = %d\n%s \n", m_pHttpFetch, len, ReqData); //printf("%s\n", s_ErrMsg.c_str()); return 0; }