#ifndef BAREV_FT_H #define BAREV_FT_H /* File transfer foundations (C89), compatible direction/state model. */ enum barev_ft_direction { BAREV_FT_SEND = 0, BAREV_FT_RECV = 1 }; enum barev_ft_state { BAREV_FTS_IDLE = 0, BAREV_FTS_OFFER_SENT, BAREV_FTS_OFFER_RECV, BAREV_FTS_ACCEPTED, BAREV_FTS_STREAMHOST_SENT, BAREV_FTS_STREAMHOST_RECV, BAREV_FTS_TRANSFERRING, BAREV_FTS_DONE, BAREV_FTS_ERROR }; int barev_ft_socks5_server_handshake(int sockfd); int barev_ft_socks5_client_handshake(int sockfd, const char *dstaddr40); int barev_ft_build_si_offer(const char *from_jid, const char *to_jid, const char *id, const char *sid, const char *file_name, long file_size, char *out, unsigned long out_n); int barev_ft_build_si_accept(const char *from_jid, const char *to_jid, const char *id, char *out, unsigned long out_n); int barev_ft_build_si_reject(const char *from_jid, const char *to_jid, const char *id, const char *code, char *out, unsigned long out_n); int barev_ft_build_bytestreams_query(const char *from_jid, const char *to_jid, const char *id, const char *sid, const char *host, unsigned short port, char *out, unsigned long out_n); int barev_ft_build_bytestreams_used(const char *from_jid, const char *to_jid, const char *id, const char *sid, const char *host_jid, char *out, unsigned long out_n); int barev_ft_is_si_offer(const char *xml); int barev_ft_is_bytestreams_query(const char *xml); int barev_ft_extract_attr(const char *xml, const char *attr, char *out, unsigned long out_n); int barev_ft_parse_si_offer(const char *xml, char *sid, unsigned long sid_n, char *name, unsigned long name_n, long *size_out); int barev_ft_parse_streamhost(const char *xml, char *sid, unsigned long sid_n, char *host, unsigned long host_n, unsigned short *port_out, char *jid, unsigned long jid_n); int barev_ft_compute_dstaddr40(const char *sid, const char *initiator_jid, const char *target_jid, char out40[41]); int barev_ft_recv_file_blocking(int sockfd, const char *save_path, long expected_size, long *bytes_done); int barev_ft_listen_range(unsigned short min_port, unsigned short max_port, unsigned short *bound_port); int barev_ft_send_file_blocking(int sockfd, const char *path, long *bytes_done); #endif