/* * libssh2_knownhost_del * * Remove a host from the collection of known hosts. * */ LIBSSH2_API int libssh2_knownhost_del(LIBSSH2_KNOWNHOSTS *hosts, struct libssh2_knownhost *entry) { struct known_host *node; /* check that this was retrieved the right way or get out */ if(!entry || (entry->magic != KNOWNHOST_MAGIC)) return _libssh2_error(hosts->session, LIBSSH2_ERROR_INVAL, "Invalid host information"); /* get the internal node pointer */ node = entry->node; /* unlink from the list of all hosts */ _libssh2_list_remove(&node->node); /* clear the struct now since the memory in which it is allocated is about to be freed! */ memset(entry, 0, sizeof(struct libssh2_knownhost)); /* free all resources */ free_host(hosts->session, node); return 0; }
/* * _libssh2_packet_ask * * Scan the brigade for a matching packet type, optionally poll the socket for * a packet first */ int _libssh2_packet_ask(LIBSSH2_SESSION * session, unsigned char packet_type, unsigned char **data, size_t *data_len, int match_ofs, const unsigned char *match_buf, size_t match_len) { LIBSSH2_PACKET *packet = _libssh2_list_first(&session->packets); _libssh2_debug(session, LIBSSH2_TRACE_TRANS, "Looking for packet of type: %d", (int) packet_type); while (packet) { if (packet->data[0] == packet_type && (packet->data_len >= (match_ofs + match_len)) && (!match_buf || (memcmp(packet->data + match_ofs, match_buf, match_len) == 0))) { *data = packet->data; *data_len = packet->data_len; /* unlink struct from session->packets */ _libssh2_list_remove(&packet->node); LIBSSH2_FREE(session, packet); return 0; } packet = _libssh2_list_next(&packet->node); } return -1; }
/* * libssh2_knownhost_del * * Remove a host from the collection of known hosts. * */ LIBSSH2_API int libssh2_knownhost_del(LIBSSH2_KNOWNHOSTS *hosts, struct libssh2_knownhost *entry) { struct known_host *node; if(!entry || (entry->magic != KNOWNHOST_MAGIC)) /* check that this was retrieved the right way or get out */ return LIBSSH2_ERROR_INVAL; /* get the internal node pointer */ node = entry->node; /* unlink from the list of all hosts */ _libssh2_list_remove(&node->node); /* free all resources */ free_host(hosts->session, node); /* clear the struct now since this host entry has been removed! */ memset(entry, 0, sizeof(struct libssh2_knownhost)); return 0; }