#include <string.h>

#include <rfc1522.h>

#include <stringtools.h>
#include <mimedecode.h>

std::string rfc1522_token(const std::string &text, unsigned &i)
 {
  std::string dest;

  dest.reserve(100);

  for(; i<text.size(); i++)
   {
    if(text[i]=='?')
     {
      i++;
      return dest;
     }
    dest+=text[i];
   }

  return dest;
 }

std::string decode_rfc1522(const std::string &text)
 {
  std::string dest, charset, encoding, encoded_text;

  for(unsigned i=0; i<text.size(); i++)
   {
    if(strncmp(text.c_str()+i, "=?", 2)==0)
     {
      i+=2;
      charset=rfc1522_token(text, i);
      encoding=rfc1522_token(text, i);
      encoded_text=rfc1522_token(text, i);

      if(stringcasecmp(encoding, "Q")==0)
        dest+=mime_qp_decode(encoded_text, TRUE);
      else if(stringcasecmp(encoding, "B")==0)
        dest+=mime_base64_decode(encoded_text);
     }
    else
      dest+=text[i];
   }

  return dest;
 }



syntax highlighted by Code2HTML, v. 0.9.1