• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/pptp/

Lines Matching defs:conn

53     PPTP_CONN * conn;
176 int pptp_write_some(PPTP_CONN * conn);
177 int pptp_read_some(PPTP_CONN * conn);
179 int pptp_make_packet(PPTP_CONN * conn, void **buf, size_t *size);
181 int pptp_send_ctrl_packet(PPTP_CONN * conn, void * buffer, size_t size);
183 int pptp_dispatch_packet(PPTP_CONN * conn, void * buffer, size_t size);
185 int ctrlp_disp(PPTP_CONN * conn, void * buffer, size_t size);
190 void pptp_set_link(PPTP_CONN * conn, int peer_call_id);
262 PPTP_CONN *conn;
264 if ((conn = malloc(sizeof(*conn))) == NULL) return NULL;
265 if ((conn->call = vector_create()) == NULL) { free(conn); return NULL; }
267 conn->inet_sock = inet_sock;
268 conn->conn_state = CONN_IDLE;
269 conn->ka_state = KA_NONE;
270 conn->ka_id = 1;
271 conn->call_serial_number = 0;
272 conn->callback = callback;
274 conn->read_size = conn->write_size = 0;
275 conn->read_alloc = conn->write_alloc = INITIAL_BUFSIZE;
276 conn->read_buffer =
277 malloc(sizeof(*(conn->read_buffer)) * conn->read_alloc);
278 conn->write_buffer =
279 malloc(sizeof(*(conn->write_buffer)) * conn->write_alloc);
280 if (conn->read_buffer == NULL || conn->write_buffer == NULL) {
281 if (conn->read_buffer != NULL) free(conn->read_buffer);
282 if (conn->write_buffer != NULL) free(conn->write_buffer);
283 vector_destroy(conn->call); free(conn); return NULL;
286 fcntl(conn->inet_sock, F_SETFL, O_NONBLOCK);
303 if (pptp_send_ctrl_packet(conn, &packet, sizeof(packet)))
304 conn->conn_state = CONN_WAIT_CTL_REPLY;
312 global.conn = conn;
316 return conn;
319 int pptp_conn_established(PPTP_CONN *conn) {
320 return (conn->conn_state == CONN_ESTABLISHED);
326 PPTP_CALL * pptp_call_open(PPTP_CONN * conn, pptp_call_cb callback,
340 assert(conn && conn->call);
341 assert(conn->conn_state == CONN_ESTABLISHED);
343 if (!vector_scan(conn->call, 0, PPTP_MAX_CHANNELS - 1, &i))
352 call->sernum = conn->call_serial_number++;
371 if (pptp_send_ctrl_packet(conn, &packet, sizeof(packet))) {
375 vector_insert(conn->call, i, call);
384 void pptp_call_close(PPTP_CONN * conn, PPTP_CALL * call)
389 assert(conn && conn->call); assert(call);
390 assert(vector_contains(conn->call, call->call_id));
398 pptp_send_ctrl_packet(conn, &rqst, sizeof(rqst));
405 void pptp_call_destroy(PPTP_CONN *conn, PPTP_CALL *call)
407 assert(conn && conn->call); assert(call);
408 assert(vector_contains(conn->call, call->call_id));
410 if (call->callback != NULL) call->callback(conn, call, CALL_CLOSE_DONE);
412 vector_remove(conn->call, call->call_id);
417 void pptp_conn_close(PPTP_CONN * conn, u_int8_t close_reason)
424 assert(conn && conn->call);
426 if (conn->conn_state == CONN_IDLE || conn->conn_state == CONN_WAIT_STOP_REPLY)
429 for (i = 0; i < vector_size(conn->call); i++)
430 pptp_call_close(conn, vector_get_Nth(conn->call, i));
433 pptp_send_ctrl_packet(conn, &rqst, sizeof(rqst));
435 conn->conn_state = CONN_WAIT_STOP_REPLY;
440 void pptp_conn_destroy(PPTP_CONN * conn)
443 assert(conn != NULL); assert(conn->call != NULL);
445 for (i = 0; i < vector_size(conn->call); i++)
446 pptp_call_destroy(conn, vector_get_Nth(conn->call, i));
448 if (conn->callback != NULL) conn->callback(conn, CONN_CLOSE_DONE);
450 close(conn->inet_sock);
452 vector_destroy(conn->call);
453 free(conn);
459 void pptp_fd_set(PPTP_CONN * conn, fd_set * read_set, fd_set * write_set,
462 assert(conn && conn->call);
464 if (conn->write_size > 0)
465 FD_SET(conn->inet_sock, write_set);
467 FD_SET(conn->inet_sock, read_set);
468 if (*max_fd < conn->inet_sock) *max_fd = conn->inet_sock;
476 int pptp_dispatch(PPTP_CONN * conn, fd_set * read_set, fd_set * write_set)
479 assert(conn && conn->call);
486 if (FD_ISSET(conn->inet_sock, write_set)) {
487 FD_CLR(conn->inet_sock, write_set);
488 if (conn->write_size > 0)
489 r = pptp_write_some(conn);/* write as much as we can without blocking */
492 if (r >= 0 && FD_ISSET(conn->inet_sock, read_set)) {
494 FD_CLR(conn->inet_sock, read_set);
495 r = pptp_read_some(conn); /* read as much as we can without blocking */
499 while (r >= 0 && pptp_make_packet(conn, &buffer, &size)) {
500 r = pptp_dispatch_packet(conn, buffer, size);
509 int pptp_write_some(PPTP_CONN * conn) {
511 assert(conn && conn->call);
512 retval = write(conn->inet_sock, conn->write_buffer, conn->write_size);
521 assert(retval <= conn->write_size);
522 conn->write_size -= retval;
523 memmove(conn->write_buffer, conn->write_buffer + retval, conn->write_size);
524 ctrlp_rep(conn->write_buffer, retval, 0);
529 int pptp_read_some(PPTP_CONN * conn)
532 assert(conn && conn->call);
533 if (conn->read_size == conn->read_alloc) { /* need to alloc more memory */
534 char *new_buffer = realloc(conn->read_buffer,
535 sizeof(*(conn->read_buffer)) * conn->read_alloc * 2);
539 conn->read_alloc *= 2;
540 conn->read_buffer = new_buffer;
542 retval = read(conn->inet_sock, conn->read_buffer + conn->read_size,
543 conn->read_alloc - conn->read_size);
556 conn->read_size += retval;
557 assert(conn->read_size <= conn->read_alloc);
562 int pptp_make_packet(PPTP_CONN * conn, void **buf, size_t *size)
566 assert(conn && conn->call); assert(buf != NULL); assert(size != NULL);
568 while ((conn->read_size-bad_bytes) >= sizeof(struct pptp_header)) {
570 header = (struct pptp_header *) (conn->read_buffer + bad_bytes);
578 if (ntoh16(header->length) > (conn->read_size-bad_bytes))
590 memcpy(*buf, conn->read_buffer + bad_bytes, *size);
592 conn->read_size -= (bad_bytes + *size);
593 memmove(conn->read_buffer, conn->read_buffer + bad_bytes + *size,
594 conn->read_size);
603 conn->read_size -= bad_bytes;
604 memmove(conn->read_buffer, conn->read_buffer + bad_bytes, conn->read_size);
611 int pptp_send_ctrl_packet(PPTP_CONN * conn, void * buffer, size_t size)
613 assert(conn && conn->call); assert(buffer);
614 if( conn->write_size > 0) pptp_write_some( conn);
615 if( conn->write_size == 0) {
617 retval = write(conn->inet_sock, buffer, size);
624 pptp_conn_destroy(conn); /* shut down fast. */
633 if (conn->write_size + size > conn->write_alloc) { /* need more memory */
634 char *new_buffer = realloc(conn->write_buffer,
635 sizeof(*(conn->write_buffer)) * conn->write_alloc * 2);
639 conn->write_alloc *= 2;
640 conn->write_buffer = new_buffer;
642 memcpy(conn->write_buffer + conn->write_size, buffer, size);
643 conn->write_size += size;
649 int pptp_dispatch_packet(PPTP_CONN * conn, void * buffer, size_t size)
653 assert(conn && conn->call); assert(buffer);
658 r = ctrlp_disp(conn, buffer, size);
685 int ctrlp_disp(PPTP_CONN * conn, void * buffer, size_t size)
689 assert(conn && conn->call); assert(buffer);
718 if (conn->conn_state == CONN_IDLE) {
724 pptp_send_ctrl_packet(conn, &reply, sizeof(reply));
727 if (pptp_send_ctrl_packet(conn, &reply, sizeof(reply))) {
728 conn->conn_state = CONN_ESTABLISHED;
741 if (conn->conn_state == CONN_WAIT_CTL_REPLY) {
744 if (conn->callback != NULL)
745 conn->callback(conn, CONN_OPEN_FAIL);
762 if (conn->callback != NULL)
763 conn->callback(conn, CONN_OPEN_FAIL);
767 conn->conn_state = CONN_ESTABLISHED;
769 conn->version = ntoh16(packet->version);
770 conn->firmware_rev = ntoh16(packet->firmware_rev);
771 memcpy(conn->hostname, packet->hostname, sizeof(conn->hostname));
772 memcpy(conn->vendor, packet->vendor, sizeof(conn->vendor));
775 if (conn->callback != NULL)
776 conn->callback(conn, CONN_OPEN_DONE);
790 if (conn->conn_state == CONN_IDLE) break;
791 if (pptp_send_ctrl_packet(conn, &reply, sizeof(reply))) {
792 if (conn->callback != NULL)
793 conn->callback(conn, CONN_CLOSE_RQST);
794 conn->conn_state = CONN_IDLE;
804 if (conn->conn_state == CONN_IDLE) break;
805 conn->conn_state = CONN_IDLE;
814 if ((conn->ka_state == KA_OUTSTANDING) &&
815 (ntoh32(packet->identifier) == conn->ka_id)) {
816 conn->ka_id++;
817 conn->ka_state = KA_NONE;
832 pptp_send_ctrl_packet(conn, &reply, sizeof(reply));
850 pptp_send_ctrl_packet(conn, &reply, sizeof(reply));
860 if (!vector_search(conn->call, (int) callid, &call)) {
884 call->callback(conn, call, CALL_OPEN_FAIL);
885 pptp_call_destroy(conn, call);
894 pptp_set_link(conn, call->peer_call_id);
896 call->callback(conn, call, CALL_OPEN_DONE);
914 if (vector_contains(conn->call, ntoh16(packet->call_id))) {
916 vector_search(conn->call, ntoh16(packet->call_id), &call);
918 call->callback(conn, call, CALL_CLOSE_RQST);
919 pptp_send_ctrl_packet(conn, &reply, sizeof(reply));
920 pptp_call_destroy(conn, call);
931 if (vector_contains(conn->call, ntoh16(packet->call_id))) {
936 vector_search(conn->call, ntoh16(packet->call_id), &call);
937 pptp_call_destroy(conn, call);
969 pptp_conn_close(conn, close_reason);
974 void pptp_set_link(PPTP_CONN* conn, int peer_call_id)
983 if (pptp_send_ctrl_packet(conn, &packet, sizeof(packet))) {
991 void pptp_call_get_ids(PPTP_CONN * conn, PPTP_CALL * call,
994 assert(conn != NULL); assert(call != NULL);
1000 void pptp_call_closure_put(PPTP_CONN * conn, PPTP_CALL * call, void *cl)
1002 assert(conn != NULL); assert(call != NULL);
1007 void * pptp_call_closure_get(PPTP_CONN * conn, PPTP_CALL * call)
1009 assert(conn != NULL); assert(call != NULL);
1014 void pptp_conn_closure_put(PPTP_CONN * conn, void *cl)
1016 assert(conn != NULL);
1017 conn->closure = cl;
1021 void * pptp_conn_closure_get(PPTP_CONN * conn)
1023 assert(conn != NULL);
1024 return conn->closure;
1041 if (global.conn->conn_state != CONN_ESTABLISHED) {
1042 if (global.conn->conn_state == CONN_WAIT_STOP_REPLY)
1044 pptp_conn_destroy(global.conn);
1046 pptp_conn_close(global.conn, PPTP_STOP_NONE);
1049 if (global.conn->ka_state == KA_OUTSTANDING) {
1052 pptp_conn_close(global.conn, PPTP_STOP_NONE);
1055 PPTP_HEADER_CTRL(PPTP_ECHO_RQST), hton32(global.conn->ka_id) };
1056 pptp_send_ctrl_packet(global.conn, &rqst, sizeof(rqst));
1057 global.conn->ka_state = KA_OUTSTANDING;
1060 for (i = 0; i < vector_size(global.conn->call); i++) {
1061 PPTP_CALL * call = vector_get_Nth(global.conn->call, i);
1065 pptp_call_close(global.conn, call);
1069 pptp_call_destroy(global.conn, call);