Распаковка TCP-потока, сжатого с помощью zlib - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь декодировать необработанный поток zlib, поступающий из службы.Документ API говорит, что я должен поддерживать состояние между пакетами.Я пытаюсь сделать это, используя

  if(!init_zlib_) 
  {   
    infstream_.zalloc = Z_NULL;
    infstream_.zfree = Z_NULL;
    infstream_.opaque = Z_NULL;
    infstream_.avail_in = 0;
    infstream_.next_in = Z_NULL;
    inflateInit2(&infstream_, -MAX_WBITS);
    init_zlib_ = true;
  }   

  do 
  {
    infstream_.avail_in = message_size - ptr;
    infstream_.next_in = (Bytef *)(buffer + ptr);
    infstream_.avail_out = bufsize;
    infstream_.next_out = (Bytef *)outbuffer_;

    int status = inflate(&infstream_, Z_SYNC_FLUSH);
    switch(status) 
    {
      case Z_OK:
      case Z_STREAM_END:
      case Z_BUF_ERROR:
        break;

      default:
        fprintf (stderr, "zlib error %d %s\n",
            status, infstream_.msg);
    }
  } while(infstream_.avail_out == 0);

Я могу правильно получить только первое сообщение.Отправьте это, я получаю zlib error -3 invalid stored block lengths.Что я делаю не так?

...