1 bericht aan het bekijken (van in totaal 1)
  • Q:
    Bijdrager
    Atagonis

    Base64 codering gaat verkeerd? (c++)

    Ik heb een console programma gemaakt die een map controleert op pdf files en deze vervolgens doormailed. Om de pdf files goed te verzenden moeten ze eerst gecodeerd worden in base64, ik heb hiervoor het een en ander opgezocht en heb iets dat enigszins werkt. Met enigszins bedoel ik dat de pdf files niet hellemaal goed worden gecodeerd/verstuurd, ergens in het pdf staat na het verzenden ineens extra random data. Heeft iemand een idee wat er niet goed gaat? Bij voorbaat dank.

    De functie die de pdf inleest en deze over een socket (sd) verstuurd.
    [code:1:1250b3fbe9]bool CFaxServer::SendAttachment(const char *cFile,int sd)
    {

    ifstream inFile((m_sCurDir + "//" + cFile).c_str(), ios::in | ios::binary);

    if ( !inFile )
    {
    return false;
    }

    inFile.seekg (0, ios::end);
    int filelength = inFile.tellg();
    inFile.seekg (0, ios::beg);

    int buffersize = 32000; //32kb buffer
    int encodesize = 0;

    char debuffer[buffersize];

    CBase64 *b64 = new CBase64();

    while (!inFile.eof())
    {
    inFile.read(debuffer,buffersize);

    if ( filelength < buffersize)//laatste beetje data is niet 32kb groot dus restant grote hanteren
    encodesize = filelength;
    else
    {
    filelength-=buffersize;
    encodesize = buffersize;
    }

    if (encodesize > 0)
    {
    b64->encode(debuffer,encodesize);

    write(sd, b64->getData(), b64->getSize());
    }
    else
    break;
    }
    delete b64;

    inFile.close();

    write(sd, "rn", strlen("rn"));

    return true;
    }[/code:1:1250b3fbe9]

    en de encode functie
    [code:1:1250b3fbe9]void CBase64::encode(char *input,int inplength)
    {

    BIO *bmem, *b64;
    BUF_MEM *bptr;

    b64 = BIO_new(BIO_f_base64());
    bmem = BIO_new(BIO_s_mem());
    b64 = BIO_push(b64, bmem);
    BIO_write(b64, input, inplength);
    BIO_flush(b64);
    BIO_get_mem_ptr(b64, &bptr);

    char *buff = (char *)malloc(bptr->length);
    memcpy(buff, bptr->data, bptr->length-1);

    buff[bptr->length-1] = 0;

    delete m_cBuffer; //vorige data deleten
    m_cBuffer = buff;

    m_iSize = bptr->length-1;

    BIO_free_all(b64);

    }

    [/code:1:1250b3fbe9]

1 bericht aan het bekijken (van in totaal 1)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.