diff --git a/src/sftp/sftp.h b/src/sftp/sftp.h index 2eec8caae361e2abc1ed0fe8992ba7c81330c6b1..28b0fbf0f2e14a8225435f0f9b48df0fe3409410 100644 --- a/src/sftp/sftp.h +++ b/src/sftp/sftp.h @@ -100,7 +100,6 @@ typedef struct sftp_client_state { void *cb_data; sftp_str_t err_msg; sftp_str_t err_lang; - pthread_t thread; uint32_t id; uint32_t err_id; uint32_t err_code; diff --git a/src/sftp/sftp_client.c b/src/sftp/sftp_client.c index 8fb6b8ce6d3fdbd5b48614f75b6dd05ebe5b7dc4..666b50f1e0bf56de197dc34c37bd0265a7bd3a5d 100644 --- a/src/sftp/sftp_client.c +++ b/src/sftp/sftp_client.c @@ -69,7 +69,6 @@ sftpc_finish(sftpc_state_t state) assert(state); if (state == NULL) return; - assert(state->thread == pthread_self()); // TODO: Close all open handles while (!CloseEvent(state->recv_event)) { assert(errno == EBUSY); @@ -98,7 +97,6 @@ sftpc_begin(bool (*send_cb)(uint8_t *buf, size_t len, void *cb_data), void *cb_d ret->txp = NULL; ret->send_cb = send_cb; ret->cb_data = cb_data; - ret->thread = pthread_self(); ret->id = 0; ret->err_lang = NULL; ret->err_msg = NULL; @@ -119,17 +117,12 @@ check_state(sftpc_state_t state) assert(state); if (!state) return false; - assert(state->thread == pthread_self()); - if (state->thread != pthread_self()) - return false; return true; } static bool appendheader(sftpc_state_t state, uint8_t type) { - if (!check_state(state)) - return false; state->err_code = 0; state->err_id = 0; free_sftp_str(state->err_lang); @@ -165,9 +158,6 @@ get_result(sftpc_state_t state) uint8_t *txbuf; size_t txsz; - assert(state->thread == pthread_self()); - if (state->thread != pthread_self()) - return false; if (!sftp_prep_tx_packet(state->txp, &txbuf, &txsz)) return false; if (!state->send_cb(txbuf, txsz, state->cb_data)) @@ -177,7 +167,8 @@ get_result(sftpc_state_t state) if (state->rxp->type != SSH_FXP_VERSION) { uint32_t id = sftp_get32(state->rxp); if (id != state->id) { - response_handled(state); + free(state->rxp); + state->rxp = NULL; return false; } } @@ -202,6 +193,8 @@ handle_error(sftpc_state_t state) bool sftpc_init(sftpc_state_t state) { + if (!check_state(state)) + return false; if (!appendheader(state, SSH_FXP_INIT)) return false; if (!append32(state, SFTP_VERSION)) @@ -222,6 +215,8 @@ sftpc_init(sftpc_state_t state) bool sftpc_recv(sftpc_state_t state, uint8_t *buf, uint32_t sz) { + if (!check_state(state)) + return false; if (!sftp_rx_pkt_append(&state->rxp, buf, sz)) return false; if (sftp_have_full_pkt(state->rxp)) @@ -232,6 +227,8 @@ sftpc_recv(sftpc_state_t state, uint8_t *buf, uint32_t sz) bool sftpc_realpath(sftpc_state_t state, char *path, sftp_str_t *ret) { + if (!check_state(state)) + return false; assert(ret); if (ret == NULL) return false; @@ -260,9 +257,6 @@ sftpc_realpath(sftpc_state_t state, char *path, sftp_str_t *ret) static bool parse_handle(sftpc_state_t state, sftp_str_t *handle) { - assert(state); - if (state == NULL) - return false; assert(state->rxp); if (state->rxp == NULL) return false; @@ -281,6 +275,11 @@ parse_handle(sftpc_state_t state, sftp_str_t *handle) bool sftpc_open(sftpc_state_t state, char *path, uint32_t flags, sftp_file_attr_t attr, sftp_dirhandle_t *handle) { + if (!check_state(state)) + return false; + assert(path); + if (path == NULL) + return false; assert(handle); if (handle == NULL) return false; @@ -324,6 +323,8 @@ sftpc_open(sftpc_state_t state, char *path, uint32_t flags, sftp_file_attr_t att bool sftpc_close(sftpc_state_t state, sftp_filehandle_t *handle) { + if (!check_state(state)) + return false; if (!appendheader(state, SSH_FXP_CLOSE)) return false; if (!appendfhandle(state, *handle)) @@ -339,6 +340,8 @@ sftpc_close(sftpc_state_t state, sftp_filehandle_t *handle) bool sftpc_read(sftpc_state_t state, sftp_filehandle_t handle, uint64_t offset, uint32_t len, sftp_str_t *ret) { + if (!check_state(state)) + return false; assert(ret); if (ret == NULL) return false; @@ -367,6 +370,8 @@ sftpc_read(sftpc_state_t state, sftp_filehandle_t handle, uint64_t offset, uint3 bool sftpc_write(sftpc_state_t state, sftp_filehandle_t handle, uint64_t offset, sftp_str_t data) { + if (!check_state(state)) + return false; assert(data); if (data == NULL) return false;