Server 0.0.1
HTTP/REST server implementation

src/server/read.c File Reference

#include "server.h"
#include "logger.h"
#include "stream.h"
Include dependency graph for read.c:

Go to the source code of this file.

Functions

void serverCloseConn (Server, unsigned int)
ssize_t serverRead (Server this, unsigned int i)

Detailed Description

Author:
Georg Hopp

Copyright © 2012 Georg Hopp

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.

Definition in file read.c.


Function Documentation

void serverCloseConn ( Server  ,
unsigned  int 
)

Definition at line 31 of file close_conn.c.

{
        int    fd = (this->fds)[i].fd;
        Stream st = (this->conns[fd]).stream;

        delete((this->conns)[fd].sock);
        delete((this->conns)[fd].worker);

        if (NULL != st && STREAM_SSL == st->type) {
                SSL_shutdown((st->handle).ssl);
                SSL_free((st->handle).ssl);
        }

        delete(st);

        memset(&(this->fds[i]), 0, sizeof(struct pollfd));
}
ssize_t serverRead ( Server  this,
unsigned int  i 
)

normal close: this must be mapped to -2 within the underlying read call.

Todo:
make sure all pending writes will be done before close.

Definition at line 30 of file read.c.

{
        int     fd = (this->fds)[i].fd;
        ssize_t size;

        if (NULL == (this->conns)[fd].worker) {
                loggerLog(
                                this->logger,
                                LOGGER_INFO,
                                "initialization error: NULL reader");
                return -1;
        }

        switch ((size = streamReaderRead(
                                        (this->conns)[fd].worker,
                                        (this->conns)[fd].stream)))
        {
                case -2:
                        // DROP-THROUGH

                case -1: 
                        /*
                         * read failure / close connection
                         */
                        loggerLog(this->logger, LOGGER_INFO,
                                        "connection[%d] closed...%s",
                                        fd,
                                        inet_ntoa((((this->conns)[fd].sock)->addr).sin_addr));
                        serverCloseConn(this, i);
                        break;

                case 0:
                        break;

                default:
                        (this->fds)[i].events |= POLLOUT;
                        break;
        }

        return size;
}

Here is the call graph for this function:

Here is the caller graph for this function:

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines