Beispiel #1
0
static void bb_session_clear(struct bb_session *bbs) {
	int i;
	struct bb_connection *bbc = bbs->connection;

	// remove the session from the hash table
        bb_sht_remove(bbs);
                struct bb_session_request *bbsr = bbs->requests_head;
                while(bbsr) {
                        // in spdy mode, the first header is empty
                        for(i=bbc->spdy;i<=bbsr->header_pos;i++) {
                                free(bbsr->headers[i].key);
                                free(bbsr->headers[i].value);
                        }
                        if (bbsr->uwsgi_buf) {
                                free(bbsr->uwsgi_buf);
                        }
                        if (bbsr->websocket_message_queue) {
                                free(bbsr->websocket_message_queue);
                        }
                        struct bb_session_request *tmp_bbsr = bbsr;
                        bbsr = bbsr->next;
                        free(tmp_bbsr);
                }

                // if linked to a dealer, send a 'end' message
                if (bbs->dealer) {
                        bb_zmq_send_msg(bbs->dealer->identity, bbs->dealer->len, (char *) &bbs->uuid_part1, BB_UUID_LEN, "end", 3, "", 0);
                }

}
Beispiel #2
0
void bb_session_close(struct bb_session *bbs) {
	int i;
	ev_io_stop(blastbeat.loop, &bbs->reader.reader);
	ev_io_stop(blastbeat.loop, &bbs->writer.writer);
	if (bbs->ssl) {
		// this should be better managed, but why wasting resources ?
		// just ignore its return value
		SSL_shutdown(bbs->ssl);
		SSL_free(bbs->ssl);
	}
	close(bbs->fd);
	// remove the session from the hash table
	bb_sht_remove(bbs);
	struct bb_session_request *bbsr = bbs->requests_head;
	while(bbsr) {
		for(i=0;i<=bbsr->header_pos;i++) {
			free(bbsr->headers[i].key);
			free(bbsr->headers[i].value);
		}
		if (bbsr->uwsgi_buf) {
			free(bbsr->uwsgi_buf);
		}
		if (bbsr->websocket_message_queue) {
			free(bbsr->websocket_message_queue);
		}
		struct bb_session_request *tmp_bbsr = bbsr;
		bbsr = bbsr->next;
		free(tmp_bbsr);
	}

	struct bb_writer_item *bbwi = bbs->writer.head;
	while(bbwi) {
		struct bb_writer_item *old_bbwi = bbwi;	
		bbwi = bbwi->next;
		if (old_bbwi->free_it) {
			free(old_bbwi->buf);
		}
		free(old_bbwi);
	}

	// if linked to a dealer, send a 'end' message
	if (bbs->dealer) {
		bb_zmq_send_msg(bbs->dealer->identity, bbs->dealer->len, (char *) &bbs->uuid_part1, BB_UUID_LEN, "end", 3, "", 0);
	}

	free(bbs);
}