Beispiel #1
0
//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;
}
Beispiel #2
0
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;
}