/** * Create a connection object without queueing * @retval 1 Success * @retval 0 failure, conslt errno for more details */ struct conn * conn_create_noq(int sock, struct sockaddr * addr) { struct conn * conn; conn = malloc(sizeof (struct conn)); if (!conn) return NULL; conn_init(conn); conn->sock=sock; if (addr) sock_copyaddr(&conn->addr,addr); /* create the CAPWAP framentation manager */ conn->fragman = fragman_create(); if (conn->fragman==NULL){ conn_destroy(conn); return NULL; } /* set packet recieve and send methods */ conn->recv_packet = conn_recv_packet; conn->recv_packet_peek = conn_recv_packet_peek; conn->send_packet = conn_send_packet; /* misc settings */ conn->last_seqnum_received=-1; conn->mtu=1500; conn->cur_packet=0; conn->recv_timeout=1; conn->seqnum=-1; conn->write = conn->send_packet; conn->read = conn->recv_packet; return conn; }
/** * Create a conn object * @param sock a socket * @param addr the address associated * @param qsize size of packet queue * @return A pointer to the created object * This function creates a conn obnject with queueing functionality * for asynchronous operation. * To create a conn object without queue functionallity use #conn_create_noq. */ struct conn * conn_create(int sock, struct sockaddr * addr, int qsize) { struct conn * conn; conn = malloc(sizeof (struct conn)); if (!conn) return NULL; conn_init(conn); conn->sock=sock; if (addr) sock_copyaddr(&conn->addr,addr); conn->fragman = fragman_create(); if (conn->fragman==NULL){ conn_destroy(conn); return NULL; } conn->qsize=qsize; if (qsize != 0){ if (!(conn->q=malloc( sizeof(uint8_t *) * qsize))){ conn_destroy(conn); return NULL; } conn->qrpos=-1; if (sem_init(&conn->q_sem,0,0)!=0){ cw_log(LOG_ERR,"Fatal- Can't init semaphore for conn object: %s",strerror(errno)); conn_destroy(conn); return NULL; }; conn->recv_packet=conn_q_recv_packet; conn->recv_packet_peek=conn_q_recv_packet_peek; } else{ conn->recv_packet = conn_recv_packet; conn->recv_packet_peek = conn_recv_packet_peek; } conn->send_packet = conn_send_packet; // conn->send_data_packet = conn_send_data_packet; conn->last_seqnum_received=-1; conn->mtu=1500; conn->cur_packet=0; conn->recv_timeout=1; conn->seqnum=-1; conn->write = conn->send_packet; conn->read = conn->recv_packet; // conn->write_data = conn->send_data_packet; conn->dtls_mtu = 1500; return conn; }