void init_port() { DO_INIT(); DI_INIT(); CK_INIT(); CS_INIT(); }
/* Initialize connection */ CONN *conn_init(int fd, char *ip, int port) { CONN *conn = NULL; if(fd > 0 && ip && port > 0 && (conn = calloc(1, sizeof(CONN)))) { conn->fd = fd; strcpy(conn->ip, ip); conn->port = port; TIMER_INIT(conn->timer); MB_INIT(conn->buffer, MB_BLOCK_SIZE); MB_INIT(conn->packet, MB_BLOCK_SIZE); MB_INIT(conn->cache, MB_BLOCK_SIZE); MB_INIT(conn->oob, MB_BLOCK_SIZE); CK_INIT(conn->chunk); conn->send_queue = QUEUE_INIT(); conn->event = ev_init(); conn->set = conn_set; conn->close = conn_close; conn->over = conn_over; conn->terminate = conn_terminate; conn->start_cstate = conn_start_cstate; conn->over_cstate = conn_over_cstate; conn->set_timeout = conn_set_timeout; conn->set_session = conn_set_session; conn->push_message = conn_push_message; conn->read_handler = conn_read_handler; conn->write_handler = conn_write_handler; conn->packet_reader = conn_packet_reader; conn->packet_handler = conn_packet_handler; conn->oob_handler = conn_oob_handler; conn->data_handler = conn_data_handler; conn->transaction_handler = conn_transaction_handler; conn->save_cache = conn_save_cache; conn->chunk_reader = conn_chunk_reader; conn->recv_chunk = conn_recv_chunk; conn->push_chunk = conn_push_chunk; conn->recv_file = conn_recv_file; conn->push_file = conn_push_file; conn->set_session = conn_set_session; conn->clean = conn_clean; } return conn; }
/* push chunk file */ int conn_push_file(CONN *conn, char *filename, long long offset, long long size) { int ret = -1; CHUNK *cp = NULL; CONN_CHECK_RET(conn, ret); if(conn && conn->send_queue && filename && offset >= 0 && size > 0) { CK_INIT(cp); if(cp) { CK_FILE(cp, filename, offset, size); QUEUE_PUSH(conn->send_queue, PCHUNK, &cp); if((QTOTAL(conn->send_queue)) > 0 ) conn->event->add(conn->event, E_WRITE); DEBUG_LOGGER(conn->logger, "Pushed file[%s] [%lld][%lld] to " "send_queue total %d on %s:%d via %d ", filename, offset, size, QTOTAL(conn->send_queue), conn->ip, conn->port, conn->fd); ret = 0; } } return ret; }
/* push chunk */ int conn_push_chunk(CONN *conn, void *data, int size) { int ret = -1; CHUNK *cp = NULL; CONN_CHECK_RET(conn, ret); if(conn && conn->send_queue && data && size > 0) { CK_INIT(cp); if(cp) { CK_MEM(cp, size); CK_MEM_COPY(cp, data, size); QUEUE_PUSH(conn->send_queue, PCHUNK, &cp); } if(QTOTAL(conn->send_queue) > 0 ) conn->event->add(conn->event, E_WRITE); DEBUG_LOGGER(conn->logger, "Pushed chunk size[%d] to send_queue " "total %d on %s:%d via %d ", size, QTOTAL(conn->send_queue), conn->ip, conn->port, conn->fd); ret = 0; } return ret; }