| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | 
							- // MGStreamAdapter.cpp
 
- #include "MGStreamAdapter.h"
 
- mg_buf::mg_buf(struct mg_connection* _conn) : conn(_conn) {
 
-   setp(buffer, buffer + BUF_SIZE - 1);  // -1 to leave space for overflow '\0'
 
- }
 
- mg_buf::int_type mg_buf::overflow(int_type c) {
 
-   if (c != EOF) {
 
-     *pptr() = c;
 
-     pbump(1);
 
-   }
 
-   if (flush_buffer() == EOF) {
 
-     return EOF;
 
-   }
 
-   return c;
 
- }
 
- int mg_buf::flush_buffer() {
 
-   int len = int(pptr() - pbase());
 
-   if (mg_write(conn, buffer, len) != len) {
 
-     return EOF;
 
-   }
 
-   pbump(-len);  // reset put pointer accordingly
 
-   return len;
 
- }
 
- int mg_buf::sync() {
 
-   if (flush_buffer() == EOF) {
 
-     return -1;  // return -1 on error
 
-   }
 
-   return 0;
 
- }
 
- MGStreamAdapter::MGStreamAdapter(struct mg_connection* _conn)
 
-     : std::ostream(&buf), buf(_conn) {
 
-   rdbuf(&buf);  // set the custom streambuf
 
- }
 
- mg_read_buf::mg_read_buf(struct mg_connection* _conn) : conn(_conn) {
 
-   setg(buffer + BUF_SIZE,   // beginning of putback area
 
-        buffer + BUF_SIZE,   // read position
 
-        buffer + BUF_SIZE);  // end position
 
- }
 
- mg_read_buf::int_type mg_read_buf::underflow() {
 
-   if (gptr() < egptr()) {  // buffer not exhausted
 
-     return traits_type::to_int_type(*gptr());
 
-   }
 
-   char* base = buffer;
 
-   char* start = base;
 
-   if (eback() == base) {  // true when this isn't the first fill
 
-     // Make arrangements for putback characters
 
-     std::memmove(base, egptr() - 2, 2);
 
-     start += 2;
 
-   }
 
-   // Read new characters
 
-   int n = mg_read(conn, start, buffer + BUF_SIZE - start);
 
-   if (n == 0) {
 
-     return traits_type::eof();
 
-   }
 
-   // Set buffer pointers
 
-   setg(base, start, start + n);
 
-   // Return next character
 
-   return traits_type::to_int_type(*gptr());
 
- }
 
- MGInputStreamAdapter::MGInputStreamAdapter(struct mg_connection* _conn)
 
-     : std::istream(&buf), buf(_conn) {
 
-   rdbuf(&buf);  // set the custom streambuf
 
- }
 
 
  |