From 96352cb489b223651ecb561837e73b91ddad1117 Mon Sep 17 00:00:00 2001 From: Chris Osborn Date: Sun, 9 Nov 2025 10:55:09 -0800 Subject: [PATCH] Change network-protocol classes to return netProtoErr_t instead of bool Made the network-protocol classes be explicit about error codes. Methods now return either NETPROTO_ERR_NONE or NETPROTO_ERR_UNSPECIFIED, which removes any confusion about the old true/false behavior and whether success or failure looked "backwards." The netProtoErr_t enum still matches the previous bool usage, so existing failure-check logic did not need any changes. --- lib/ftp/fnFTP.cpp | 107 ++--- lib/ftp/fnFTP.h | 31 +- lib/network-protocol/FS.cpp | 102 ++--- lib/network-protocol/FS.h | 72 ++-- lib/network-protocol/FTP.cpp | 85 ++-- lib/network-protocol/FTP.h | 46 +-- lib/network-protocol/HTTP.cpp | 139 +++---- lib/network-protocol/HTTP.h | 96 ++--- lib/network-protocol/Protocol.cpp | 30 +- lib/network-protocol/Protocol.h | 25 +- lib/network-protocol/SD.cpp | 108 ++--- lib/network-protocol/SD.h | 48 +-- lib/network-protocol/SMB.cpp | 666 +++++++++++++++--------------- lib/network-protocol/SMB.h | 44 +- lib/network-protocol/SSH.cpp | 62 +-- lib/network-protocol/SSH.h | 20 +- lib/network-protocol/TCP.cpp | 78 ++-- lib/network-protocol/TCP.h | 30 +- lib/network-protocol/TNFS.cpp | 78 ++-- lib/network-protocol/TNFS.h | 44 +- lib/network-protocol/Telnet.cpp | 16 +- lib/network-protocol/Telnet.h | 8 +- lib/network-protocol/Test.cpp | 30 +- lib/network-protocol/Test.h | 20 +- lib/network-protocol/UDP.cpp | 62 +-- lib/network-protocol/UDP.h | 26 +- 26 files changed, 1019 insertions(+), 1054 deletions(-) diff --git a/lib/ftp/fnFTP.cpp b/lib/ftp/fnFTP.cpp index 21ce30c7b..f7e584b08 100644 --- a/lib/ftp/fnFTP.cpp +++ b/lib/ftp/fnFTP.cpp @@ -655,7 +655,7 @@ fnFTP::~fnFTP() data = nullptr; } -bool fnFTP::login(const string &_username, const string &_password, const string &_hostname, unsigned short _port) +netProtoErr_t fnFTP::login(const string &_username, const string &_password, const string &_hostname, unsigned short _port) { username = _username; password = _password; @@ -669,7 +669,7 @@ bool fnFTP::login(const string &_username, const string &_password, const string { Debug_printf("Could not log in, errno = %u\r\n", errno); _statusCode = 421; // service not available - return true; + return NETPROTO_ERR_UNSPECIFIED; } Debug_printf("Connected, waiting for 220.\r\n"); @@ -678,7 +678,7 @@ bool fnFTP::login(const string &_username, const string &_password, const string if (parse_response()) { Debug_printf("Timed out waiting for 220 banner.\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } Debug_printf("Sending USER.\r\n"); @@ -691,13 +691,13 @@ bool fnFTP::login(const string &_username, const string &_password, const string else { Debug_printf("Could not send username. Response was: %s\r\n", controlResponse.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } if (parse_response()) { Debug_printf("Timed out waiting for 331 or 230.\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } if (is_positive_intermediate_reply() && is_authentication()) @@ -709,7 +709,7 @@ bool fnFTP::login(const string &_username, const string &_password, const string if (parse_response()) { Debug_printf("Timed out waiting for 230.\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } } else @@ -725,13 +725,13 @@ bool fnFTP::login(const string &_username, const string &_password, const string else { Debug_printf("Could not finish log in. Response was: %s\r\n", controlResponse.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } if (parse_response()) { Debug_printf("Timed out waiting for 200.\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } if (is_positive_completion_reply() && is_syntax()) @@ -743,16 +743,16 @@ bool fnFTP::login(const string &_username, const string &_password, const string Debug_printf("Could not set image type. Ignoring.\r\n"); } - return false; + return NETPROTO_ERR_NONE; } -bool fnFTP::logout() +netProtoErr_t fnFTP::logout() { Debug_printf("fnFTP::logout()\r\n"); if (!control->connected()) { Debug_printf("Logout called when not connected.\r\n"); - return false; + return NETPROTO_ERR_NONE; } if (data->connected()) @@ -771,22 +771,22 @@ bool fnFTP::logout() control->stop(); - return false; + return NETPROTO_ERR_NONE; } -bool fnFTP::reconnect() +netProtoErr_t fnFTP::reconnect() { Debug_println("Trying to re-login"); if (control->connected()) logout(); return login(username, password, hostname, control_port); } -bool fnFTP::open_file(string path, bool stor) +netProtoErr_t fnFTP::open_file(string path, bool stor) { if (!control->connected()) { Debug_printf("fnFTP::open_file(%s) attempted while not logged in. Aborting.\r\n", path.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } int retries = 2; @@ -800,7 +800,7 @@ bool fnFTP::open_file(string path, bool stor) continue; // successfully reconnected } Debug_printf("fnFTP::open_file(%s, %s) could not get data port. Aborting.\n", path.c_str(), stor ? "STOR" : "RETR"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } // Do command @@ -816,7 +816,7 @@ bool fnFTP::open_file(string path, bool stor) if (parse_response()) { Debug_printf("Timed out waiting for 150 response.\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } if (is_positive_preliminary_reply() && is_filesystem_related()) @@ -824,21 +824,21 @@ bool fnFTP::open_file(string path, bool stor) _stor = stor; _expect_control_response = !stor; Debug_printf("Server began transfer.\r\n"); - return false; + return NETPROTO_ERR_NONE; } else { Debug_printf("Server could not begin transfer. Response was: %s\r\n", controlResponse.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } } -bool fnFTP::open_directory(string path, string pattern) +netProtoErr_t fnFTP::open_directory(string path, string pattern) { if (!control->connected()) { Debug_printf("fnFTP::open_directory(%s%s) attempted while not logged in. Aborting.\r\n", path.c_str(), pattern.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } int retries = 2; @@ -852,7 +852,7 @@ bool fnFTP::open_directory(string path, string pattern) continue; // successfully reconnected } Debug_printf("fnFTP::open_directory(%s%s) could not get data port, aborting.\n", path.c_str(), pattern.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } // perform LIST @@ -861,7 +861,7 @@ bool fnFTP::open_directory(string path, string pattern) if (parse_response()) { Debug_printf("fnFTP::open_directory(%s%s) Timed out waiting for 150 response.\r\n", path.c_str(), pattern.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } Debug_printf("fnFTP::open_directory(%s%s) - %s\r\n", path.c_str(), pattern.c_str(), controlResponse.c_str()); @@ -874,7 +874,7 @@ bool fnFTP::open_directory(string path, string pattern) else { Debug_printf("Didn't get our 150\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } uint8_t buf[256]; @@ -882,7 +882,7 @@ bool fnFTP::open_directory(string path, string pattern) // if (buf == nullptr) // { // Debug_printf("fnFTP::open_directory() - Could not allocate 2048 bytes.\r\n"); - // return true; + // return NETPROTO_ERR_UNSPECIFIED; // } int tmout_counter = 1 + FTP_TIMEOUT / 50; @@ -927,13 +927,13 @@ bool fnFTP::open_directory(string path, string pattern) if (tmout_counter == 0 || (got_response == false && parse_response())) { Debug_printf("fnFTP::open_directory(%s%s) Timed out waiting for 226 response.\r\n", path.c_str(), pattern.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } - return false; // all good. + return NETPROTO_ERR_NONE; // all good. } -bool fnFTP::read_directory(string &name, long &filesize, bool &is_dir) +netProtoErr_t fnFTP::read_directory(string &name, long &filesize, bool &is_dir) { string line; struct ftpparse parse; @@ -941,7 +941,7 @@ bool fnFTP::read_directory(string &name, long &filesize, bool &is_dir) getline(dirBuffer, line); if (line.empty()) - return true; + return NETPROTO_ERR_UNSPECIFIED; //Debug_printf("fnFTP::read_directory - %s\r\n",line.c_str()); line = line.substr(0, line.size() - 1); @@ -950,35 +950,35 @@ bool fnFTP::read_directory(string &name, long &filesize, bool &is_dir) filesize = parse.size; is_dir = (parse.flagtrycwd == 1); Debug_printf("Name: \"%s\" size: %lu\r\n", name.c_str(), filesize); - return dirBuffer.eof(); + return dirBuffer.eof() ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool fnFTP::read_file(uint8_t *buf, unsigned short len) +netProtoErr_t fnFTP::read_file(uint8_t *buf, unsigned short len) { //Debug_printf("fnFTP::read_file(%p, %u)\r\n", buf, len); if (!data->connected() && data->available() == 0) { Debug_printf("fnFTP::read_file(%p,%u) - data socket not connected, aborting.\r\n", buf, len); - return true; + return NETPROTO_ERR_UNSPECIFIED; } - return len != data->read(buf, len); + return len != data->read(buf, len) ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool fnFTP::write_file(uint8_t *buf, unsigned short len) +netProtoErr_t fnFTP::write_file(uint8_t *buf, unsigned short len) { //Debug_printf("fnFTP::write_file(%p,%u)\r\n", buf, len); if (!data->connected()) { Debug_printf("fnFTP::write_file(%p,%u) - data socket not connected, aborting.\r\n", buf, len); - return true; + return NETPROTO_ERR_UNSPECIFIED; } - return len != data->write(buf, len); + return len != data->write(buf, len) ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool fnFTP::close() +netProtoErr_t fnFTP::close() { - bool res = false; + netProtoErr_t res = NETPROTO_ERR_NONE; Debug_printf("fnFTP::close()\r\n"); if (_stor) { @@ -989,7 +989,7 @@ bool fnFTP::close() if (parse_response()) { Debug_printf("Timed out waiting for 226.\r\n"); - res = true; + res = NETPROTO_ERR_UNSPECIFIED; } } _stor = false; @@ -1008,16 +1008,17 @@ int fnFTP::data_available() return data->available(); } -bool fnFTP::data_connected() +netProtoErr_t fnFTP::data_connected() { if (_expect_control_response && control->available()) _expect_control_response = parse_response(); - return _expect_control_response || data->connected(); + return (_expect_control_response || data->connected()) + ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } /** FTP UTILITY FUNCTIONS **********************************************************************/ -bool fnFTP::parse_response() +netProtoErr_t fnFTP::parse_response() { char respBuf[384]; // room for control message incl. file path and file size int num_read = 0; @@ -1032,7 +1033,7 @@ bool fnFTP::parse_response() { // Timeout _statusCode = 421; // service not available - return true; // error + return NETPROTO_ERR_UNSPECIFIED; // error } if (num_read >= 4) { @@ -1053,7 +1054,7 @@ bool fnFTP::parse_response() // error - nothing above Debug_printf("fnFTP::parse_response() - failed\r\n"); _statusCode = 501; //syntax error - return true; // error + return NETPROTO_ERR_UNSPECIFIED; // error } // update control response and status code @@ -1061,7 +1062,7 @@ bool fnFTP::parse_response() _statusCode = atoi(controlResponse.substr(0, 3).c_str()); Debug_printf("fnFTP::parse_response() - %d, \"%s\"\r\n", _statusCode, controlResponse.c_str()); - return false; // ok + return NETPROTO_ERR_NONE; // ok } int fnFTP::read_response_line(char *buf, int buflen) @@ -1107,7 +1108,7 @@ int fnFTP::read_response_line(char *buf, int buflen) return num_read; } -bool fnFTP::get_data_port() +netProtoErr_t fnFTP::get_data_port() { size_t port_pos_beg, port_pos_end; @@ -1121,26 +1122,26 @@ bool fnFTP::get_data_port() if (parse_response()) { Debug_printf("Timed out waiting for response.\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } /* if (is_negative_permanent_reply()) { Debug_printf("Server unable to reserve port. Response was: %s\r\n", controlResponse.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } if (is_negative_transient_reply()) { Debug_printf("Cannot get data port. Response was: %s\r\n", controlResponse.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } if (is_negative_transient_reply()) { Debug_printf("Cannot get data port. Response was: %s\n", controlResponse.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } */ @@ -1148,7 +1149,7 @@ bool fnFTP::get_data_port() if (_statusCode != 229) { Debug_printf("Cannot get data port. Response was: %s\n", controlResponse.c_str()); - return true; + return NETPROTO_ERR_UNSPECIFIED; } // At this point, we have a port mapping trapped in (|||1234|), peel it out of there. @@ -1162,14 +1163,14 @@ bool fnFTP::get_data_port() if (!data->connect(hostname.c_str(), data_port, FTP_TIMEOUT)) { Debug_printf("Could not open data port %u, errno = %u\r\n", data_port, errno); - return true; + return NETPROTO_ERR_UNSPECIFIED; } else { Debug_printf("Data port %u opened.\r\n", data_port); } - return false; + return NETPROTO_ERR_NONE; } /** FTP VERBS **********************************************************************************/ diff --git a/lib/ftp/fnFTP.h b/lib/ftp/fnFTP.h index fef3ced20..c7b4e86c8 100644 --- a/lib/ftp/fnFTP.h +++ b/lib/ftp/fnFTP.h @@ -8,6 +8,7 @@ #include #include "fnTcpClient.h" +#include "Protocol.h" using std::string; @@ -42,13 +43,13 @@ class fnFTP * @param port port to login (default 21) * @return TRUE on error, FALSE on success */ - bool login(const string &_username, const string &_password, const string &_hostname, unsigned short _port = 21); + netProtoErr_t login(const string &_username, const string &_password, const string &_hostname, unsigned short _port = 21); /** * Log out of FTP server, closes control connection. * @return TRUE on error, FALSE on success. */ - bool logout(); + netProtoErr_t logout(); /** * Open file on FTP server @@ -56,7 +57,7 @@ class fnFTP * @param stor TRUE means STOR, otherwise RETR * @return TRUE if error, FALSE if successful. */ - bool open_file(string path, bool stor); + netProtoErr_t open_file(string path, bool stor); /** * Open directory on FTP server, grab it, and return back. @@ -64,7 +65,7 @@ class fnFTP * @param pattern pattern to retrieve. * @return TRUE if error, FALSE if successful. */ - bool open_directory(string path, string pattern); + netProtoErr_t open_directory(string path, string pattern); /** * Read and return one parsed line of directory @@ -72,7 +73,7 @@ class fnFTP * @param filesize pointer to output filesize * @return TRUE if error, FALSE if successful */ - bool read_directory(string& name, long& filesize, bool &is_dir); + netProtoErr_t read_directory(string& name, long& filesize, bool &is_dir); /** * Read file from data socket into buffer. @@ -80,7 +81,7 @@ class fnFTP * @param len length of target buffer * @return TRUE if error, FALSE if successful. */ - bool read_file(uint8_t* buf, unsigned short len); + netProtoErr_t read_file(uint8_t* buf, unsigned short len); /** * Write file from buffer into data socket. @@ -88,12 +89,12 @@ class fnFTP * @param len length of source buffer * @return TRUE if error, FALSE if successful. */ - bool write_file(uint8_t* buf, unsigned short len); + netProtoErr_t write_file(uint8_t* buf, unsigned short len); /** * @brief close data and/or control sockets. */ - bool close(); + netProtoErr_t close(); /** * @brief parsed out response code from controlResponse @@ -111,14 +112,14 @@ class fnFTP * @brief return if data connected * @return TRUE if connected, FALSE if disconnected */ - bool data_connected(); + netProtoErr_t data_connected(); /** * Recovery FTP connection. * @return TRUE on error, FALSE on success */ - bool reconnect(); + netProtoErr_t reconnect(); protected: private: @@ -129,7 +130,7 @@ class fnFTP /* do STOR - file opened for write */ bool _stor = false; - + /* if to check control channel too while dealing with data channel */ bool _expect_control_response = false; @@ -170,7 +171,7 @@ class fnFTP * Directory buffer stream */ std::stringstream dirBuffer; - + /** * The data port returned by EPSV */ @@ -180,7 +181,7 @@ class fnFTP * read and parse control response * @return true on error, false on success. */ - bool parse_response(); + netProtoErr_t parse_response(); /** * read single line of control response @@ -193,7 +194,7 @@ class fnFTP * Port is set and returned in data_port variable. * @return TRUE if error, FALSE if successful. */ - bool get_data_port(); + netProtoErr_t get_data_port(); /** * @brief Is response a positive preliminary reply? @@ -318,4 +319,4 @@ class fnFTP }; -#endif /* FNFTP_H */ \ No newline at end of file +#endif /* FNFTP_H */ diff --git a/lib/network-protocol/FS.cpp b/lib/network-protocol/FS.cpp index 12d706712..dd87baf46 100755 --- a/lib/network-protocol/FS.cpp +++ b/lib/network-protocol/FS.cpp @@ -32,7 +32,7 @@ NetworkProtocolFS::~NetworkProtocolFS() { } -bool NetworkProtocolFS::open(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::open(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { // Call base class. NetworkProtocol::open(url, cmdFrame); @@ -41,7 +41,7 @@ bool NetworkProtocolFS::open(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) update_dir_filename(opened_url); if (mount(url) == true) - return true; + return NETPROTO_ERR_UNSPECIFIED; if (cmdFrame->aux1 == 6 || cmdFrame->aux1 == 7) { @@ -53,7 +53,7 @@ bool NetworkProtocolFS::open(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) } } -bool NetworkProtocolFS::open_file() +netProtoErr_t NetworkProtocolFS::open_file() { update_dir_filename(opened_url); @@ -67,12 +67,12 @@ bool NetworkProtocolFS::open_file() openMode = FILE; if (opened_url->path.empty()) - return true; + return NETPROTO_ERR_UNSPECIFIED; return open_file_handle(); } -bool NetworkProtocolFS::open_dir() +netProtoErr_t NetworkProtocolFS::open_dir() { openMode = DIR; #ifndef BUILD_ATARI @@ -92,13 +92,13 @@ bool NetworkProtocolFS::open_dir() if (opened_url->path.empty()) { - return true; + return NETPROTO_ERR_UNSPECIFIED; } if (open_dir_handle() == true) { fserror_to_error(); - return true; + return NETPROTO_ERR_UNSPECIFIED; } std::vector entryBuffer(ENTRY_BUFFER_SIZE); @@ -135,7 +135,7 @@ bool NetworkProtocolFS::open_dir() if (error == NETWORK_ERROR_END_OF_FILE) error = NETWORK_ERROR_SUCCESS; - return error != NETWORK_ERROR_SUCCESS; + return error == NETWORK_ERROR_SUCCESS ? NETPROTO_ERR_NONE : NETPROTO_ERR_UNSPECIFIED; } void NetworkProtocolFS::update_dir_filename(PeoplesUrlParser *url) @@ -150,7 +150,7 @@ void NetworkProtocolFS::update_dir_filename(PeoplesUrlParser *url) filename = "*"; } -bool NetworkProtocolFS::close() +netProtoErr_t NetworkProtocolFS::close() { bool file_closed = false; // call base class. @@ -172,24 +172,24 @@ bool NetworkProtocolFS::close() fserror_to_error(); if (umount() == true) - return true; + return NETPROTO_ERR_UNSPECIFIED; - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFS::close_file() +netProtoErr_t NetworkProtocolFS::close_file() { return close_file_handle(); } -bool NetworkProtocolFS::close_dir() +netProtoErr_t NetworkProtocolFS::close_dir() { return close_dir_handle(); } -bool NetworkProtocolFS::read(unsigned short len) +netProtoErr_t NetworkProtocolFS::read(unsigned short len) { - bool ret; + netProtoErr_t ret; is_write = false; @@ -202,13 +202,13 @@ bool NetworkProtocolFS::read(unsigned short len) ret = read_dir(len); break; default: - ret = true; + ret = NETPROTO_ERR_UNSPECIFIED; } return ret; } -bool NetworkProtocolFS::read_file(unsigned short len) +netProtoErr_t NetworkProtocolFS::read_file(unsigned short len) { std::vector buf = std::vector(len); @@ -224,7 +224,7 @@ bool NetworkProtocolFS::read_file(unsigned short len) #ifdef VERBOSE_PROTOCOL Debug_printf("Nothing new from adapter, bailing.\n"); #endif - return true; + return NETPROTO_ERR_UNSPECIFIED; } // Append to receive buffer. @@ -238,9 +238,9 @@ bool NetworkProtocolFS::read_file(unsigned short len) return NetworkProtocol::read(len); } -bool NetworkProtocolFS::read_dir(unsigned short len) +netProtoErr_t NetworkProtocolFS::read_dir(unsigned short len) { - bool ret; + netProtoErr_t ret; if (receiveBuffer->length() == 0) { @@ -254,23 +254,23 @@ bool NetworkProtocolFS::read_dir(unsigned short len) return ret; } -bool NetworkProtocolFS::write(unsigned short len) +netProtoErr_t NetworkProtocolFS::write(unsigned short len) { is_write = true; len = translate_transmit_buffer(); return write_file(len); // Do more here? not sure. } -bool NetworkProtocolFS::write_file(unsigned short len) +netProtoErr_t NetworkProtocolFS::write_file(unsigned short len) { if (write_file_handle((uint8_t *)transmitBuffer->data(), len) == true) - return true; + return NETPROTO_ERR_UNSPECIFIED; transmitBuffer->erase(0, len); - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFS::status(NetworkStatus *status) +netProtoErr_t NetworkProtocolFS::status(NetworkStatus *status) { switch (openMode) { @@ -281,7 +281,7 @@ bool NetworkProtocolFS::status(NetworkStatus *status) return status_dir(status); break; default: - return true; + return NETPROTO_ERR_UNSPECIFIED; } } @@ -291,7 +291,7 @@ bool NetworkProtocolFS::status(NetworkStatus *status) #define WAITING_CAP 65534 #endif -bool NetworkProtocolFS::status_file(NetworkStatus *status) +netProtoErr_t NetworkProtocolFS::status_file(NetworkStatus *status) { unsigned int remaining; @@ -315,10 +315,10 @@ bool NetworkProtocolFS::status_file(NetworkStatus *status) NetworkProtocol::status(status); #endif - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFS::status_dir(NetworkStatus *status) +netProtoErr_t NetworkProtocolFS::status_dir(NetworkStatus *status) { status->rxBytesWaiting = dirBuffer.length(); status->connected = dirBuffer.length() > 0 ? 1 : 0; @@ -326,7 +326,7 @@ bool NetworkProtocolFS::status_dir(NetworkStatus *status) NetworkProtocol::status(status); - return false; + return NETPROTO_ERR_NONE; } uint8_t NetworkProtocolFS::special_inquiry(uint8_t cmd) @@ -342,33 +342,33 @@ uint8_t NetworkProtocolFS::special_inquiry(uint8_t cmd) return ret; } -bool NetworkProtocolFS::special_00(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::special_00(cmdFrame_t *cmdFrame) { switch (cmdFrame->comnd) { default: error = NETWORK_ERROR_NOT_IMPLEMENTED; - return true; + return NETPROTO_ERR_UNSPECIFIED; } } -bool NetworkProtocolFS::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { switch (cmdFrame->comnd) { default: error = NETWORK_ERROR_NOT_IMPLEMENTED; - return true; + return NETPROTO_ERR_UNSPECIFIED; } } -bool NetworkProtocolFS::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { switch (cmdFrame->comnd) { default: error = NETWORK_ERROR_NOT_IMPLEMENTED; - return true; + return NETPROTO_ERR_UNSPECIFIED; } } @@ -423,7 +423,7 @@ void NetworkProtocolFS::resolve() } -bool NetworkProtocolFS::perform_idempotent_80(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::perform_idempotent_80(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolFS::perform_idempotent_80, url: %s cmd: 0x%02X\r\n", url->url.c_str(), cmdFrame->comnd); @@ -446,11 +446,11 @@ bool NetworkProtocolFS::perform_idempotent_80(PeoplesUrlParser *url, cmdFrame_t #ifdef VERBOSE_PROTOCOL Debug_printf("Uncaught idempotent command: 0x%02X\r\n", cmdFrame->comnd); #endif - return true; + return NETPROTO_ERR_UNSPECIFIED; } } -bool NetworkProtocolFS::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { update_dir_filename(url); @@ -462,7 +462,7 @@ bool NetworkProtocolFS::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) if (comma_pos == std::string::npos) { error = NETWORK_ERROR_INVALID_DEVICESPEC; - return true; + return NETPROTO_ERR_UNSPECIFIED; } destFilename = dir + filename.substr(comma_pos + 1); @@ -472,30 +472,30 @@ bool NetworkProtocolFS::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) Debug_printf("RENAME destfilename, %s, filename, %s\r\n", destFilename.c_str(), filename.c_str()); #endif - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFS::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFS::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFS::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFS::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFS::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFS::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } diff --git a/lib/network-protocol/FS.h b/lib/network-protocol/FS.h index f21d6b0b4..418356cf5 100755 --- a/lib/network-protocol/FS.h +++ b/lib/network-protocol/FS.h @@ -50,48 +50,48 @@ class NetworkProtocolFS : public NetworkProtocol * @param cmdFrame pointer to command frame for aux1/aux2/etc values. * @return error flag TRUE on error, FALSE on success. */ - virtual bool open(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t open(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Close the open URL * @return error flag TRUE on error, FALSE on success. */ - virtual bool close(); + netProtoErr_t close() override; /** * @brief Read len bytes from the open URL. * @param len Length in bytes. * @return error flag TRUE on error, FALSE on success */ - virtual bool read(unsigned short len); + netProtoErr_t read(unsigned short len) override; /** * @brief Write len bytes to the open URL. * @param len Length in bytes. * @return error flag TRUE on error, FALSE on success */ - virtual bool write(unsigned short len); + netProtoErr_t write(unsigned short len) override; /** * @brief Return protocol status information in provided NetworkStatus object. * @param status a pointer to a NetworkStatus object to receive status information * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool status(NetworkStatus *status); + netProtoErr_t status(NetworkStatus *status) override; /** * @brief Return a DSTATS byte for a requested COMMAND byte. * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd); + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame); + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; /** * @brief execute a command that returns a payload to the atari. @@ -99,21 +99,21 @@ class NetworkProtocolFS : public NetworkProtocol * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief perform an idempotent command with DSTATS 0x80, that does not require open channel. * @param url The URL object. * @param cmdFrame command frame. */ - virtual bool perform_idempotent_80(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t perform_idempotent_80(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; protected: /** @@ -154,7 +154,7 @@ class NetworkProtocolFS : public NetworkProtocol * Directory buffer */ std::string dirBuffer; - + /** * Is open file a directory? */ @@ -174,38 +174,38 @@ class NetworkProtocolFS : public NetworkProtocol * @brief Open a file via path. * @return FALSE if successful, TRUE on error. */ - virtual bool open_file(); + virtual netProtoErr_t open_file(); /** * @brief open a file handle to fd * @return FALSE if successful, TRUE on error. */ - virtual bool open_file_handle() = 0; + virtual netProtoErr_t open_file_handle() = 0; /** * @brief Open a Directory via path * @return FALSE if successful, TRUE on error. */ - virtual bool open_dir(); + virtual netProtoErr_t open_dir(); /** * @brief Open directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool open_dir_handle() = 0; + virtual netProtoErr_t open_dir_handle() = 0; /** * @brief Do mount * @param url the url to mount * @return false on no error, true on error. */ - virtual bool mount(PeoplesUrlParser *url) = 0; + virtual netProtoErr_t mount(PeoplesUrlParser *url) = 0; /** * @brief Unmount TNFS server specified in mountInfo. * @return false on no error, true on error. */ - virtual bool umount() = 0; + virtual netProtoErr_t umount() = 0; /** * @brief Translate filesystem error codes to Atari error codes. Sets error in Protocol. @@ -230,7 +230,7 @@ class NetworkProtocolFS : public NetworkProtocol * @param len the number of bytes requested * @return FALSE if success, TRUE if error */ - virtual bool read_file(unsigned short len); + virtual netProtoErr_t read_file(unsigned short len); /** * @brief Read from file handle @@ -238,66 +238,66 @@ class NetworkProtocolFS : public NetworkProtocol * @param len the number of bytes requested * @return FALSE if success, TRUE if error */ - virtual bool read_file_handle(uint8_t *buf, unsigned short len) = 0; + virtual netProtoErr_t read_file_handle(uint8_t *buf, unsigned short len) = 0; /** * @brief Read from directory * @param len the number of bytes requested * @return FALSE if success, TRUE if error */ - virtual bool read_dir(unsigned short len); + virtual netProtoErr_t read_dir(unsigned short len); /** * @brief read next directory entry. * @param buf the target buffer * @param len length of target buffer */ - virtual bool read_dir_entry(char *buf, unsigned short len) = 0; + virtual netProtoErr_t read_dir_entry(char *buf, unsigned short len) = 0; /** * @brief return status from file (e.g. # of bytes remaining.) * @param Pointer to NetworkStatus object to inject new data. * @return FALSE if success, TRUE if error. */ - virtual bool status_file(NetworkStatus *status); + virtual netProtoErr_t status_file(NetworkStatus *status); /** * @brief return status from directory (e.g. # of bytes remaining.) * @param Pointer to NetworkStatus object to inject new data. * @return FALSE if success, TRUE if error. */ - virtual bool status_dir(NetworkStatus *status); + virtual netProtoErr_t status_dir(NetworkStatus *status); /** * @brief close file. * @return FALSE if success, true if error. */ - virtual bool close_file(); + virtual netProtoErr_t close_file(); /** * @brief close file handle * @return FALSE if success, true if error */ - virtual bool close_file_handle() = 0; + virtual netProtoErr_t close_file_handle() = 0; /** * @brief close directory. * @return FALSE if success, true if error. */ - virtual bool close_dir(); + virtual netProtoErr_t close_dir(); /** * @brief Close directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_dir_handle() = 0; + virtual netProtoErr_t close_dir_handle() = 0; /** * @brief Write to file * @param len the number of bytes requested * @return FALSE if successful, TRUE if error. */ - virtual bool write_file(unsigned short len); + virtual netProtoErr_t write_file(unsigned short len); /** * @brief for len requested, break up into number of required @@ -305,12 +305,12 @@ class NetworkProtocolFS : public NetworkProtocol * @param len Requested # of bytes. * @return TRUE on error, FALSE on success. */ - virtual bool write_file_handle(uint8_t *buf, unsigned short len) = 0; + virtual netProtoErr_t write_file_handle(uint8_t *buf, unsigned short len) = 0; /** * @brief get status of file, filling in filesize. mount() must have already been called. */ - virtual bool stat() = 0; + virtual netProtoErr_t stat() = 0; /** * @brief Rename file specified by incoming devicespec. @@ -318,7 +318,7 @@ class NetworkProtocolFS : public NetworkProtocol * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + virtual netProtoErr_t rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); /** * @brief Delete file specified by incoming devicespec. @@ -326,7 +326,7 @@ class NetworkProtocolFS : public NetworkProtocol * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + virtual netProtoErr_t del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); /** * @brief Make directory specified by incoming devicespec. @@ -334,7 +334,7 @@ class NetworkProtocolFS : public NetworkProtocol * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + virtual netProtoErr_t mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); /** * @brief Remove directory specified by incoming devicespec. @@ -342,7 +342,7 @@ class NetworkProtocolFS : public NetworkProtocol * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + virtual netProtoErr_t rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); /** * @brief lock file specified by incoming devicespec. @@ -350,7 +350,7 @@ class NetworkProtocolFS : public NetworkProtocol * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + virtual netProtoErr_t lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); /** * @brief unlock file specified by incoming devicespec. @@ -358,7 +358,7 @@ class NetworkProtocolFS : public NetworkProtocol * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + virtual netProtoErr_t unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); }; diff --git a/lib/network-protocol/FTP.cpp b/lib/network-protocol/FTP.cpp index ea2c6c704..10c3f2854 100755 --- a/lib/network-protocol/FTP.cpp +++ b/lib/network-protocol/FTP.cpp @@ -1,6 +1,6 @@ /** * NetworkProtocolFTP - * + * * Implementation */ @@ -33,9 +33,9 @@ NetworkProtocolFTP::~NetworkProtocolFTP() ftp = nullptr; } -bool NetworkProtocolFTP::open_file_handle() +netProtoErr_t NetworkProtocolFTP::open_file_handle() { - bool res; + netProtoErr_t res; switch (aux1_open) { @@ -48,7 +48,7 @@ bool NetworkProtocolFTP::open_file_handle() case PROTOCOL_OPEN_APPEND: case PROTOCOL_OPEN_READWRITE: error = NETWORK_ERROR_NOT_IMPLEMENTED; - return true; + return NETPROTO_ERR_UNSPECIFIED; break; } @@ -57,18 +57,18 @@ bool NetworkProtocolFTP::open_file_handle() return res; } -bool NetworkProtocolFTP::open_dir_handle() +netProtoErr_t NetworkProtocolFTP::open_dir_handle() { - bool res; + netProtoErr_t res; res = ftp->open_directory(dir, filename); fserror_to_error(); return res; } -bool NetworkProtocolFTP::mount(PeoplesUrlParser *url) +netProtoErr_t NetworkProtocolFTP::mount(PeoplesUrlParser *url) { - bool res; + netProtoErr_t res; // Path isn't used res = ftp->login("anonymous", "fujinet@fujinet.online", url->host); @@ -76,7 +76,7 @@ bool NetworkProtocolFTP::mount(PeoplesUrlParser *url) return res; } -bool NetworkProtocolFTP::umount() +netProtoErr_t NetworkProtocolFTP::umount() { return ftp->logout(); } @@ -157,18 +157,18 @@ void NetworkProtocolFTP::fserror_to_error() } } -bool NetworkProtocolFTP::read_file_handle(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolFTP::read_file_handle(uint8_t *buf, unsigned short len) { - bool res; + netProtoErr_t res; res = ftp->read_file(buf, len); fserror_to_error(); return res; } -bool NetworkProtocolFTP::read_dir_entry(char *buf, unsigned short len) +netProtoErr_t NetworkProtocolFTP::read_dir_entry(char *buf, unsigned short len) { - bool res; + netProtoErr_t res; std::string filename; long filesz; bool is_dir; @@ -185,33 +185,30 @@ bool NetworkProtocolFTP::read_dir_entry(char *buf, unsigned short len) return res; } -bool NetworkProtocolFTP::close_file_handle() +netProtoErr_t NetworkProtocolFTP::close_file_handle() { - bool res; + netProtoErr_t res; res = ftp->close(); fserror_to_error(); return res; } -bool NetworkProtocolFTP::close_dir_handle() +netProtoErr_t NetworkProtocolFTP::close_dir_handle() { - bool res; + netProtoErr_t res; res = ftp->close(); fserror_to_error(); return res; } -bool NetworkProtocolFTP::write_file_handle(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolFTP::write_file_handle(uint8_t *buf, unsigned short len) { - bool res; - - res = ftp->write_file(buf, len); - return res; + return ftp->write_file(buf, len); } -bool NetworkProtocolFTP::status_file(NetworkStatus *status) +netProtoErr_t NetworkProtocolFTP::status_file(NetworkStatus *status) { status->rxBytesWaiting = ftp->data_available() > 65535 ? 65535 : ftp->data_available(); status->connected = ftp->data_connected(); @@ -219,7 +216,7 @@ bool NetworkProtocolFTP::status_file(NetworkStatus *status) status->error = error; NetworkProtocol::status(status); - return false; + return NETPROTO_ERR_NONE; } uint8_t NetworkProtocolFTP::special_inquiry(uint8_t cmd) @@ -241,52 +238,52 @@ uint8_t NetworkProtocolFTP::special_inquiry(uint8_t cmd) return ret; } -bool NetworkProtocolFTP::special_00(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFTP::special_00(cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFTP::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFTP::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFTP::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFTP::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFTP::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFTP::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFTP::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFTP::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFTP::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFTP::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFTP::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFTP::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFTP::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFTP::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFTP::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolFTP::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolFTP::stat() +netProtoErr_t NetworkProtocolFTP::stat() { - return false; + return NETPROTO_ERR_NONE; } diff --git a/lib/network-protocol/FTP.h b/lib/network-protocol/FTP.h index 8de318ff9..d932c6e3e 100755 --- a/lib/network-protocol/FTP.h +++ b/lib/network-protocol/FTP.h @@ -34,14 +34,14 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd); + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame); + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; /** * @brief execute a command that returns a payload to the atari. @@ -49,14 +49,14 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief Rename file specified by incoming devicespec. @@ -64,7 +64,7 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Delete file specified by incoming devicespec. @@ -72,7 +72,7 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Make directory specified by incoming devicespec. @@ -80,7 +80,7 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Remove directory specified by incoming devicespec. @@ -88,7 +88,7 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief lock file specified by incoming devicespec. @@ -96,7 +96,7 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief unlock file specified by incoming devicespec. @@ -104,7 +104,7 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; protected: /** @@ -131,31 +131,31 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @brief Open file handle, set fd * @return FALSE if successful, TRUE on error. */ - virtual bool open_file_handle(); + netProtoErr_t open_file_handle() override; /** * @brief Open directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool open_dir_handle(); + netProtoErr_t open_dir_handle() override; /** * @brief Do FTP mount * @param url the URL to mount * @return false on no error, true on error. */ - virtual bool mount(PeoplesUrlParser *url); + netProtoErr_t mount(PeoplesUrlParser *url) override; /** * @brief Unmount FTP server specified in mountInfo. * @return false on no error, true on error. */ - virtual bool umount(); + netProtoErr_t umount() override; /** * @brief Translate filesystem error codes to Atari error codes. Sets error in Protocol. */ - virtual void fserror_to_error(); + void fserror_to_error() override; /** * @brief Read from file handle @@ -163,14 +163,14 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param len the number of bytes requested * @return FALSE if success, TRUE if error */ - virtual bool read_file_handle(uint8_t *buf, unsigned short len); + netProtoErr_t read_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief read next directory entry. * @param buf the target buffer * @param len length of target buffer */ - virtual bool read_dir_entry(char *buf, unsigned short len); + netProtoErr_t read_dir_entry(char *buf, unsigned short len) override; /** * @brief for len requested, break up into number of required @@ -178,26 +178,26 @@ class NetworkProtocolFTP : public NetworkProtocolFS * @param len Requested # of bytes. * @return TRUE on error, FALSE on success. */ - virtual bool write_file_handle(uint8_t *buf, unsigned short len); + netProtoErr_t write_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief close file handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_file_handle(); + netProtoErr_t close_file_handle() override; /** * @brief Close directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_dir_handle(); + netProtoErr_t close_dir_handle() override; /** * @brief return status from file (e.g. # of bytes remaining.) * @param Pointer to NetworkStatus object to inject new data. * @return FALSE if success, TRUE if error. */ - virtual bool status_file(NetworkStatus *status); + netProtoErr_t status_file(NetworkStatus *status) override; private: /** @@ -213,7 +213,7 @@ class NetworkProtocolFTP : public NetworkProtocolFS /** * @brief get status of file, filling in filesize. mount() must have already been called. */ - virtual bool stat(); + netProtoErr_t stat() override; }; -#endif /* NETWORKPROTOCOLFTP_H */ \ No newline at end of file +#endif /* NETWORKPROTOCOLFTP_H */ diff --git a/lib/network-protocol/HTTP.cpp b/lib/network-protocol/HTTP.cpp index 1d8fa2888..09902b03c 100755 --- a/lib/network-protocol/HTTP.cpp +++ b/lib/network-protocol/HTTP.cpp @@ -68,20 +68,20 @@ uint8_t NetworkProtocolHTTP::special_inquiry(uint8_t cmd) } } -bool NetworkProtocolHTTP::special_00(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolHTTP::special_00(cmdFrame_t *cmdFrame) { switch (cmdFrame->comnd) { case 'M': return special_set_channel_mode(cmdFrame); default: - return true; + return NETPROTO_ERR_UNSPECIFIED; } } -bool NetworkProtocolHTTP::special_set_channel_mode(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolHTTP::special_set_channel_mode(cmdFrame_t *cmdFrame) { - bool err = false; + netProtoErr_t err = NETPROTO_ERR_NONE; #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::special_set_channel_mode(%u)\r\n", httpChannelMode); @@ -111,13 +111,13 @@ bool NetworkProtocolHTTP::special_set_channel_mode(cmdFrame_t *cmdFrame) break; default: error = NETWORK_ERROR_INVALID_COMMAND; - err = true; + err = NETPROTO_ERR_UNSPECIFIED; } return err; } -bool NetworkProtocolHTTP::open_file_handle() +netProtoErr_t NetworkProtocolHTTP::open_file_handle() { #ifdef VERBOSE_PROTOCOL Debug_printv("NetworkProtocolHTTP::open_file_handle() aux1[%d]\r\n", aux1_open); @@ -143,20 +143,20 @@ bool NetworkProtocolHTTP::open_file_handle() break; default: error = NETWORK_ERROR_NOT_IMPLEMENTED; - return true; + return NETPROTO_ERR_UNSPECIFIED; } // This is set IF we came back through here via resolve(). if (resultCode > 399) { fserror_to_error(); - return true; + return NETPROTO_ERR_UNSPECIFIED; } - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::open_dir_handle() +netProtoErr_t NetworkProtocolHTTP::open_dir_handle() { int len, actual_len; @@ -172,7 +172,7 @@ bool NetworkProtocolHTTP::open_dir_handle() } // client->begin already called in mount() - resultCode = client->PROPFIND(HTTP_CLIENT_CLASS::webdav_depth::DEPTH_1, + resultCode = client->PROPFIND(HTTP_CLIENT_CLASS::webdav_depth::DEPTH_1, "\r\n" "\r\n" "\r\n\r\n\r\n" @@ -183,7 +183,7 @@ bool NetworkProtocolHTTP::open_dir_handle() { httpOpenMode = GET; http_transaction(); - return false; + return NETPROTO_ERR_NONE; } if (resultCode > 399) @@ -192,7 +192,7 @@ bool NetworkProtocolHTTP::open_dir_handle() Debug_printf("Could not do PROPFIND. Result code %u\r\n", resultCode); #endif fserror_to_error(); - return true; + return NETPROTO_ERR_UNSPECIFIED; } // Setup XML WebDAV parser @@ -202,7 +202,7 @@ bool NetworkProtocolHTTP::open_dir_handle() Debug_printf("Failed to setup parser.\r\n"); #endif error = NETWORK_ERROR_GENERAL; - return true; + return NETPROTO_ERR_UNSPECIFIED; } std::vector buf; @@ -268,7 +268,7 @@ bool NetworkProtocolHTTP::open_dir_handle() Debug_printf("NetworkProtocolHTTP::open_dir_handle() - error %u\r\n", error); #endif webDAV.end_parser(true); // release parser resources + clear collected entries - return true; + return NETPROTO_ERR_UNSPECIFIED; } // finish parsing (not sure if this is necessary) @@ -288,10 +288,10 @@ bool NetworkProtocolHTTP::open_dir_handle() } // Directory parsed, ready to be returned by read_dir_entry() - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::mount(PeoplesUrlParser *url) +netProtoErr_t NetworkProtocolHTTP::mount(PeoplesUrlParser *url) { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::mount(%s)\r\n", url->url.c_str()); @@ -330,22 +330,22 @@ bool NetworkProtocolHTTP::mount(PeoplesUrlParser *url) url->rebuildUrl(); } - return !client->begin(url->url); + return client->begin(url->url) ? NETPROTO_ERR_NONE : NETPROTO_ERR_UNSPECIFIED; } -bool NetworkProtocolHTTP::umount() +netProtoErr_t NetworkProtocolHTTP::umount() { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::umount()\r\n"); #endif if (client == nullptr) - return false; + return NETPROTO_ERR_NONE; delete client; client = nullptr; - return false; + return NETPROTO_ERR_NONE; } void NetworkProtocolHTTP::fserror_to_error() @@ -427,7 +427,7 @@ void NetworkProtocolHTTP::fserror_to_error() } } -bool NetworkProtocolHTTP::status_file(NetworkStatus *status) +netProtoErr_t NetworkProtocolHTTP::status_file(NetworkStatus *status) { // if (fromInterrupt == false) // Debug_printf("Channel mode is %u\r\n", httpChannelMode); @@ -436,7 +436,7 @@ bool NetworkProtocolHTTP::status_file(NetworkStatus *status) status->rxBytesWaiting = 0; status->connected = 0; status->error = NETWORK_ERROR_GENERAL; - return true; + return NETPROTO_ERR_UNSPECIFIED; } switch (httpChannelMode) @@ -459,7 +459,7 @@ bool NetworkProtocolHTTP::status_file(NetworkStatus *status) else status->error = error; // Debug_printf("NetworkProtocolHTTP::status_file DATA, available: %d, s.rxBW: %d, s.conn: %d, s.err: %d\r\n", available, status->rxBytesWaiting, status->connected, status->error); - return false; + return NETPROTO_ERR_NONE; } case SET_HEADERS: case COLLECT_HEADERS: @@ -467,7 +467,7 @@ bool NetworkProtocolHTTP::status_file(NetworkStatus *status) status->rxBytesWaiting = status->connected = 0; status->error = NETWORK_ERROR_SUCCESS; // Debug_printf("NetworkProtocolHTTP::status_file SH/CH/SPD, s.rxBW: %d, s.conn: %d, s.err: %d\r\n", status->rxBytesWaiting, status->connected, status->error); - return false; + return NETPROTO_ERR_NONE; case GET_HEADERS: if (resultCode == 0) http_transaction(); @@ -475,14 +475,14 @@ bool NetworkProtocolHTTP::status_file(NetworkStatus *status) status->connected = 0; // so that we always ask in this mode. status->error = returned_header_cursor == collect_headers.size() && error == NETWORK_ERROR_SUCCESS ? NETWORK_ERROR_END_OF_FILE : error; // Debug_printf("NetworkProtocolHTTP::status_file GH, s.rxBW: %d, s.conn: %d, s.err: %d\r\n", status->rxBytesWaiting, status->connected, status->error); - return false; + return NETPROTO_ERR_NONE; default: Debug_printf("ERROR: Unknown httpChannelMode: %d\r\n", httpChannelMode); - return true; + return NETPROTO_ERR_UNSPECIFIED; } } -bool NetworkProtocolHTTP::read_file_handle(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolHTTP::read_file_handle(uint8_t *buf, unsigned short len) { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::read_file_handle(%p,%u)\r\n", buf, len); @@ -495,21 +495,22 @@ bool NetworkProtocolHTTP::read_file_handle(uint8_t *buf, unsigned short len) case SET_HEADERS: case SEND_POST_DATA: error = NETWORK_ERROR_WRITE_ONLY; - return true; + return NETPROTO_ERR_UNSPECIFIED; case GET_HEADERS: return read_file_handle_header(buf, len); default: - return true; + return NETPROTO_ERR_UNSPECIFIED; } } -bool NetworkProtocolHTTP::read_file_handle_header(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolHTTP::read_file_handle_header(uint8_t *buf, unsigned short len) { memcpy(buf, returned_headers[returned_header_cursor++].data(), len); - return returned_header_cursor > returned_headers.size(); + return returned_header_cursor > returned_headers.size() + ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::read_file_handle_data(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolHTTP::read_file_handle_data(uint8_t *buf, unsigned short len) { int actual_len; @@ -522,12 +523,12 @@ bool NetworkProtocolHTTP::read_file_handle_data(uint8_t *buf, unsigned short len actual_len = client->read(buf, len); - return len != actual_len; + return len != actual_len ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::read_dir_entry(char *buf, unsigned short len) +netProtoErr_t NetworkProtocolHTTP::read_dir_entry(char *buf, unsigned short len) { - bool err = false; + netProtoErr_t err = NETPROTO_ERR_NONE; #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::read_dir_entry(%p,%u)\r\n", buf, len); @@ -547,13 +548,13 @@ bool NetworkProtocolHTTP::read_dir_entry(char *buf, unsigned short len) { // EOF error = NETWORK_ERROR_END_OF_FILE; - err = true; + err = NETPROTO_ERR_UNSPECIFIED; } return err; } -bool NetworkProtocolHTTP::close_file_handle() +netProtoErr_t NetworkProtocolHTTP::close_file_handle() { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::close_file_Handle()\r\n"); @@ -567,19 +568,19 @@ bool NetworkProtocolHTTP::close_file_handle() fserror_to_error(); } - return (error == 1 ? false : true); + return (error == 1 ? NETPROTO_ERR_NONE : NETPROTO_ERR_UNSPECIFIED); } -bool NetworkProtocolHTTP::close_dir_handle() +netProtoErr_t NetworkProtocolHTTP::close_dir_handle() { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::close_dir_handle()\r\n"); #endif webDAV.clear(); // release directory entries - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::write_file_handle(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolHTTP::write_file_handle(uint8_t *buf, unsigned short len) { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::write_file_handle(%p,%u)\r\n", buf, len); @@ -597,18 +598,18 @@ bool NetworkProtocolHTTP::write_file_handle(uint8_t *buf, unsigned short len) return write_file_handle_send_post_data(buf, len); case GET_HEADERS: error = NETWORK_ERROR_READ_ONLY; - return true; + return NETPROTO_ERR_UNSPECIFIED; default: - return true; + return NETPROTO_ERR_UNSPECIFIED; } } -bool NetworkProtocolHTTP::write_file_handle_get_header(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolHTTP::write_file_handle_get_header(uint8_t *buf, unsigned short len) { if (httpOpenMode != GET) { error = NETWORK_ERROR_NOT_IMPLEMENTED; - return true; + return NETPROTO_ERR_UNSPECIFIED; } if (len > 0) { @@ -625,10 +626,10 @@ bool NetworkProtocolHTTP::write_file_handle_get_header(uint8_t *buf, unsigned sh // Add result to header vector. collect_headers.push_back(std::move(requestedHeader)); // Use std::move to avoid copying the string - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::write_file_handle_set_header(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolHTTP::write_file_handle_set_header(uint8_t *buf, unsigned short len) { std::string incomingHeader = std::string((char *)buf, len); size_t pos = incomingHeader.find('\x9b'); @@ -641,7 +642,7 @@ bool NetworkProtocolHTTP::write_file_handle_set_header(uint8_t *buf, unsigned sh pos = incomingHeader.find(":"); if (pos == std::string::npos) - return true; + return NETPROTO_ERR_UNSPECIFIED; #ifdef ESP_PLATFORM #ifdef VERBOSE_PROTOCOL @@ -661,36 +662,36 @@ bool NetworkProtocolHTTP::write_file_handle_set_header(uint8_t *buf, unsigned sh client->set_header(key.c_str(), val.c_str()); #endif - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::write_file_handle_send_post_data(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolHTTP::write_file_handle_send_post_data(uint8_t *buf, unsigned short len) { if (httpOpenMode != POST) { error = NETWORK_ERROR_INVALID_COMMAND; - return true; + return NETPROTO_ERR_UNSPECIFIED; } postData += std::string((char *)buf, len); - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::write_file_handle_data(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolHTTP::write_file_handle_data(uint8_t *buf, unsigned short len) { if (httpOpenMode == PUT || aux1_open == OPEN_MODE_HTTP_PUT_H) { postData += std::string((char *)buf, len); - return false; // come back here later. + return NETPROTO_ERR_NONE; // come back here later. } error = NETWORK_ERROR_INVALID_COMMAND; - return true; + return NETPROTO_ERR_UNSPECIFIED; } -bool NetworkProtocolHTTP::stat() +netProtoErr_t NetworkProtocolHTTP::stat() { - bool ret = false; + netProtoErr_t ret = NETPROTO_ERR_NONE; return ret; // short circuit it for now. #ifdef VERBOSE_PROTOCOL @@ -698,7 +699,7 @@ bool NetworkProtocolHTTP::stat() #endif if (aux1_open != 4) // only for READ FILE - return false; // We don't care. + return NETPROTO_ERR_NONE; // We don't care. // Since we know client is active, we need to destroy it. delete client; @@ -710,7 +711,7 @@ bool NetworkProtocolHTTP::stat() fserror_to_error(); if ((resultCode == 0) || (resultCode > 399)) - ret = true; + ret = NETPROTO_ERR_UNSPECIFIED; else { // We got valid data, set filesize, then close and dispose of client. @@ -721,7 +722,7 @@ bool NetworkProtocolHTTP::stat() // Recreate it for the rest of resolve() client = new HTTP_CLIENT_CLASS(); - ret = !client->begin(opened_url->url); + ret = client->begin(opened_url->url) ? NETPROTO_ERR_NONE : NETPROTO_ERR_UNSPECIFIED; resultCode = 0; // so GET will actually happen. } @@ -774,10 +775,10 @@ void NetworkProtocolHTTP::http_transaction() #endif } -bool NetworkProtocolHTTP::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolHTTP::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { if (NetworkProtocolFS::rename(url, cmdFrame) == true) - return true; + return NETPROTO_ERR_UNSPECIFIED; url->path = url->path.substr(0, url->path.find(",")); @@ -788,10 +789,10 @@ bool NetworkProtocolHTTP::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) umount(); - return resultCode > 399; + return resultCode > 399 ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolHTTP::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::del(%s,%s)", url->host.c_str(), url->path.c_str()); @@ -803,10 +804,10 @@ bool NetworkProtocolHTTP::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) umount(); - return resultCode > 399; + return resultCode > 399 ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolHTTP::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocolHTTP::mkdir(%s,%s)", url->host.c_str(), url->path.c_str()); @@ -818,10 +819,10 @@ bool NetworkProtocolHTTP::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) umount(); - return resultCode > 399; + return resultCode > 399 ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolHTTP::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolHTTP::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { return del(url, cmdFrame); } diff --git a/lib/network-protocol/HTTP.h b/lib/network-protocol/HTTP.h index 747d2e317..d67a08313 100755 --- a/lib/network-protocol/HTTP.h +++ b/lib/network-protocol/HTTP.h @@ -50,45 +50,45 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd); + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame); + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; protected: /** * @brief open a file handle to fd * @return FALSE if successful, TRUE on error. */ - virtual bool open_file_handle(); + netProtoErr_t open_file_handle() override; /** * @brief Open directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool open_dir_handle(); + netProtoErr_t open_dir_handle() override; /** * @brief Do mount * @param url the url to mount * @return false on no error, true on error. */ - virtual bool mount(PeoplesUrlParser *url); + netProtoErr_t mount(PeoplesUrlParser *url) override; /** * @brief Unmount TNFS server specified in mountInfo. * @return false on no error, true on error. */ - virtual bool umount(); + netProtoErr_t umount() override; /** * @brief Translate filesystem error codes to Atari error codes. Sets error in Protocol. */ - virtual void fserror_to_error(); + void fserror_to_error() override; /** * @brief Read from file handle @@ -96,26 +96,26 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param len the number of bytes requested * @return FALSE if success, TRUE if error */ - virtual bool read_file_handle(uint8_t *buf, unsigned short len); + netProtoErr_t read_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief read next directory entry. * @param buf the target buffer * @param len length of target buffer */ - virtual bool read_dir_entry(char *buf, unsigned short len); + netProtoErr_t read_dir_entry(char *buf, unsigned short len) override; /** * @brief close file handle * @return FALSE if success, true if error */ - virtual bool close_file_handle(); + netProtoErr_t close_file_handle() override; /** * @brief Close directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_dir_handle(); + netProtoErr_t close_dir_handle() override; /** * @brief for len requested, break up into number of required @@ -123,19 +123,19 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param len Requested # of bytes. * @return TRUE on error, FALSE on success. */ - virtual bool write_file_handle(uint8_t *buf, unsigned short len); + netProtoErr_t write_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief return status from channel * @param Pointer to NetworkStatus object to inject new data. * @return FALSE if success, TRUE if error. */ - virtual bool status_file(NetworkStatus *status); + netProtoErr_t status_file(NetworkStatus *status) override; /** * @brief get status of file, filling in filesize. mount() must have already been called. */ - virtual bool stat(); + netProtoErr_t stat() override; /** * @brief Rename file specified by incoming devicespec. @@ -143,7 +143,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Delete file specified by incoming devicespec. @@ -151,7 +151,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Make directory specified by incoming devicespec. @@ -159,7 +159,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Remove directory specified by incoming devicespec. @@ -167,7 +167,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame); + netProtoErr_t rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; private: /** @@ -258,7 +258,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @brief Set Channel mode (DATA, HEADERS, etc.) * @param cmdFrame the passed in command frame. */ - bool special_set_channel_mode(cmdFrame_t *cmdFrame); + netProtoErr_t special_set_channel_mode(cmdFrame_t *cmdFrame); /** * @brief header mode - retrieve requested headers previously collected. @@ -266,15 +266,15 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param len The target buffer length * @return true on ERROR FALSE on success */ - bool read_file_handle_header(uint8_t *buf, unsigned short len); + netProtoErr_t read_file_handle_header(uint8_t *buf, unsigned short len); /** - * @brief data mode - read + * @brief data mode - read * @param buf The target buffer * @param len The target buffer length * @return true on ERROR FALSE on success */ - bool read_file_handle_data(uint8_t *buf, unsigned short len); + netProtoErr_t read_file_handle_data(uint8_t *buf, unsigned short len); /** * @brief header mode - write requested headers to pass into collect_headers. @@ -282,7 +282,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param len The source buffer length * @return true on ERROR FALSE on success */ - bool write_file_handle_get_header(uint8_t *buf, unsigned short len); + netProtoErr_t write_file_handle_get_header(uint8_t *buf, unsigned short len); /** * @brief header mode - write specified header to server @@ -290,7 +290,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param len The source buffer length * @return true on ERROR FALSE on success */ - bool write_file_handle_set_header(uint8_t *buf, unsigned short len); + netProtoErr_t write_file_handle_set_header(uint8_t *buf, unsigned short len); /** * @brief post mode - write specified post data to server @@ -298,7 +298,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param len The source buffer length * @return true on ERROR FALSE on success */ - bool write_file_handle_send_post_data(uint8_t *buf, unsigned short len); + netProtoErr_t write_file_handle_send_post_data(uint8_t *buf, unsigned short len); /** * @brief data mode - write requested headers to pass into PUT @@ -306,7 +306,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param len The source buffer length * @return true on ERROR FALSE on success */ - bool write_file_handle_data(uint8_t *buf, unsigned short len); + netProtoErr_t write_file_handle_data(uint8_t *buf, unsigned short len); /** * @brief Parse directory retrieved from PROPFIND @@ -314,47 +314,7 @@ class NetworkProtocolHTTP : public NetworkProtocolFS * @param len the buffer length * @return TRUE on error, FALSE on success. */ - bool parseDir(char *buf, unsigned short len); + netProtoErr_t parseDir(char *buf, unsigned short len); }; -// moved to WebDAV.cpp -// -// /** -// * @brief Template to wrap Start call. -// * @param data pointer to parent class -// * @param El the current element being parsed -// * @param attr the array of attributes attached to element -// */ -// template -// void Start(void *data, const XML_Char *El, const XML_Char **attr) -// { -// T *handler = static_cast(data); -// handler->Start(El, attr); -// } - -// /** -// * @brief Template to wrap End call -// * @param data pointer to parent class. -// * @param El the current element being parsed. -// **/ -// template -// void End(void *data, const XML_Char *El) -// { -// T *handler = static_cast(data); -// handler->End(El); -// } - -// /** -// * @brief template to wrap character data. -// * @param data pointer to parent class -// * @param s pointer to the character data -// * @param len length of character data at pointer -// **/ -// template -// void Char(void *data, const XML_Char *s, int len) -// { -// T *handler = static_cast(data); -// handler->Char(s, len); -// } - -#endif /* NETWORKPROTOCOLHTTP_H */ \ No newline at end of file +#endif /* NETWORKPROTOCOLHTTP_H */ diff --git a/lib/network-protocol/Protocol.cpp b/lib/network-protocol/Protocol.cpp index 023895dcb..bfceb1e77 100755 --- a/lib/network-protocol/Protocol.cpp +++ b/lib/network-protocol/Protocol.cpp @@ -105,7 +105,7 @@ NetworkProtocol::~NetworkProtocol() * @param urlParser The URL object passed in to open. * @param cmdFrame The command frame to extract aux1/aux2/etc. */ -bool NetworkProtocol::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocol::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) { // Set translation mode, Bits 0-1 of aux2 translation_mode = cmdFrame->aux2 & 0x7F; // we now have more xlation modes. @@ -116,7 +116,7 @@ bool NetworkProtocol::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) opened_url = urlParser; - return false; + return NETPROTO_ERR_NONE; } void NetworkProtocol::set_open_params(uint8_t p1, uint8_t p2) @@ -132,7 +132,7 @@ void NetworkProtocol::set_open_params(uint8_t p1, uint8_t p2) /** * @brief Close connection to the protocol. */ -bool NetworkProtocol::close() +netProtoErr_t NetworkProtocol::close() { if (!transmitBuffer->empty()) write(transmitBuffer->length()); @@ -143,9 +143,9 @@ bool NetworkProtocol::close() receiveBuffer->shrink_to_fit(); transmitBuffer->shrink_to_fit(); specialBuffer->shrink_to_fit(); - + error = 1; - return false; + return NETPROTO_ERR_NONE; } /** @@ -153,14 +153,14 @@ bool NetworkProtocol::close() * @param len Number of bytes to read. * @return error flag. FALSE if successful, TRUE if error. */ -bool NetworkProtocol::read(unsigned short len) +netProtoErr_t NetworkProtocol::read(unsigned short len) { #ifdef VERBOSE_PROTOCOL Debug_printf("NetworkProtocol::read(%u)\r\n", len); #endif translate_receive_buffer(); error = 1; - return false; + return NETPROTO_ERR_NONE; } /** @@ -168,9 +168,9 @@ bool NetworkProtocol::read(unsigned short len) * @param len The # of bytes to transmit, len should not be larger than buffer. * @return error flag. FALSE if successful, TRUE if error. */ -bool NetworkProtocol::write(unsigned short len) +netProtoErr_t NetworkProtocol::write(unsigned short len) { - return false; + return NETPROTO_ERR_NONE; } /** @@ -179,17 +179,17 @@ bool NetworkProtocol::write(unsigned short len) * @param rx_buf a pointer to the receive buffer (to call read()) * @return error flag. FALSE if successful, TRUE if error. */ -bool NetworkProtocol::status(NetworkStatus *status) +netProtoErr_t NetworkProtocol::status(NetworkStatus *status) { - if (fromInterrupt) - return false; - + if (fromInterrupt) + return NETPROTO_ERR_NONE; + if (!is_write && receiveBuffer->length() == 0 && status->rxBytesWaiting > 0) read(status->rxBytesWaiting); status->rxBytesWaiting = receiveBuffer->length(); - return false; + return NETPROTO_ERR_NONE; } /** @@ -210,7 +210,7 @@ void NetworkProtocol::translate_receive_buffer() replace(receiveBuffer->begin(), receiveBuffer->end(), ASCII_BELL, ATASCII_BUZZER); replace(receiveBuffer->begin(), receiveBuffer->end(), ASCII_BACKSPACE, ATASCII_DEL); replace(receiveBuffer->begin(), receiveBuffer->end(), ASCII_TAB, ATASCII_TAB); - #endif + #endif switch (translation_mode) { diff --git a/lib/network-protocol/Protocol.h b/lib/network-protocol/Protocol.h index 660f47f4e..ef2a2f952 100755 --- a/lib/network-protocol/Protocol.h +++ b/lib/network-protocol/Protocol.h @@ -18,6 +18,11 @@ enum { PROTOCOL_OPEN_HTTP_PUT = 14, }; +enum netProtoErr_t { + NETPROTO_ERR_NONE = 0, + NETPROTO_ERR_UNSPECIFIED = 1, +}; + class NetworkProtocol { public: @@ -122,33 +127,33 @@ class NetworkProtocol * @param urlParser The URL object passed in to open. * @param cmdFrame The command frame to extract aux1/aux2/etc. */ - virtual bool open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame); + virtual netProtoErr_t open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame); /** * @brief Close connection to the protocol. */ - virtual bool close(); + virtual netProtoErr_t close(); /** * @brief Read len bytes into receiveBuffer, If protocol times out, the buffer should be null padded to length. * @param len Number of bytes to read. * @return translation successful. */ - virtual bool read(unsigned short len); + virtual netProtoErr_t read(unsigned short len); /** * @brief Write len bytes from tx_buf to protocol. * @param len The # of bytes to transmit, len should not be larger than buffer. - * @return new length. + * @return error flag. TRUE on error, FALSE on success. */ - virtual bool write(unsigned short len); + virtual netProtoErr_t write(unsigned short len); /** * @brief Return protocol status information in provided NetworkStatus object. * @param status a pointer to a NetworkStatus object to receive status information * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool status(NetworkStatus *status); + virtual netProtoErr_t status(NetworkStatus *status); /** * @brief Return a DSTATS byte for a requested COMMAND byte. @@ -162,7 +167,7 @@ class NetworkProtocol * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame) { return false; }; + virtual netProtoErr_t special_00(cmdFrame_t *cmdFrame) { return NETPROTO_ERR_NONE; }; /** * @brief execute a command that returns a payload to the atari. @@ -170,21 +175,21 @@ class NetworkProtocol * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { return false; }; + virtual netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { return NETPROTO_ERR_NONE; }; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { return false; }; + virtual netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { return NETPROTO_ERR_NONE; }; /** * @brief perform an idempotent command with DSTATS 0x80, that does not require open channel. * @param url The URL object. * @param cmdFrame command frame. */ - virtual bool perform_idempotent_80(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { return false; }; + virtual netProtoErr_t perform_idempotent_80(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { return NETPROTO_ERR_NONE; }; /** * @brief return an _atari_ error (>199) based on errno. into error for status reporting. diff --git a/lib/network-protocol/SD.cpp b/lib/network-protocol/SD.cpp index 6df110dc5..ce1fcb66e 100644 --- a/lib/network-protocol/SD.cpp +++ b/lib/network-protocol/SD.cpp @@ -1,6 +1,6 @@ /** * NetworkProtocolSD - * + * * Implementation */ @@ -31,12 +31,12 @@ NetworkProtocolSD::~NetworkProtocolSD() Debug_printf("NetworkProtocolSD::dtor\r\n"); } -bool NetworkProtocolSD::open_file_handle() +netProtoErr_t NetworkProtocolSD::open_file_handle() { const char *mode = FILE_READ; // return error if SD is not mounted - if (check_fs()) return true; + if (check_fs()) return NETPROTO_ERR_UNSPECIFIED; // Map aux1 to mode switch (aux1_open) @@ -67,13 +67,13 @@ bool NetworkProtocolSD::open_file_handle() Debug_printf("NetworkProtocolSD::open_file_handle(file: \"%s\" mode: \"%s\") error: %d\r\n", opened_url->path.c_str(), mode, error); - return nullptr == fh; + return nullptr == fh ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::open_dir_handle() +netProtoErr_t NetworkProtocolSD::open_dir_handle() { // return error if SD is not mounted - if (check_fs()) return true; + if (check_fs()) return NETPROTO_ERR_UNSPECIFIED; fnSDFAT.dir_close(); bool success = fnSDFAT.dir_open(dir.c_str(), filename.c_str(), 0); @@ -83,29 +83,29 @@ bool NetworkProtocolSD::open_dir_handle() error = NETWORK_ERROR_SUCCESS; Debug_printf("NetworkProtocolSD::open_dir_handle(%s) error: %d\r\n", opened_url->path.c_str(), error); - return !success; + return success ? NETPROTO_ERR_NONE : NETPROTO_ERR_UNSPECIFIED; } -bool NetworkProtocolSD::mount(PeoplesUrlParser *url) +netProtoErr_t NetworkProtocolSD::mount(PeoplesUrlParser *url) { error = NETWORK_ERROR_SUCCESS; return check_fs(); } -bool NetworkProtocolSD::check_fs() +netProtoErr_t NetworkProtocolSD::check_fs() { - if (!fnSDFAT.running()) + if (!fnSDFAT.running()) { error = NETWORK_ERROR_CONNECTION_REFUSED; - return true; // error + return NETPROTO_ERR_UNSPECIFIED; // error } - return false; // no error + return NETPROTO_ERR_NONE; // no error } -bool NetworkProtocolSD::umount() +netProtoErr_t NetworkProtocolSD::umount() { error = NETWORK_ERROR_SUCCESS; - return false; // no error + return NETPROTO_ERR_NONE; // no error } void NetworkProtocolSD::fserror_to_error() @@ -142,7 +142,7 @@ void NetworkProtocolSD::errno_to_error() Debug_printf("NetworkProtocolSD::errno_to_error() %d -> %d\r\n", errno, error); } -bool NetworkProtocolSD::read_file_handle(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolSD::read_file_handle(uint8_t *buf, unsigned short len) { error = NETWORK_ERROR_SUCCESS; @@ -155,15 +155,15 @@ bool NetworkProtocolSD::read_file_handle(uint8_t *buf, unsigned short len) } Debug_printf("NetworkProtocolSD::read_file_handle(len: %u) error: %d\r\n", len, error); - return NETWORK_ERROR_SUCCESS != error; + return NETWORK_ERROR_SUCCESS != error ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::read_dir_entry(char *buf, unsigned short len) +netProtoErr_t NetworkProtocolSD::read_dir_entry(char *buf, unsigned short len) { - fsdir_entry_t *entry; +fsdir_entry_t *entry; error = NETWORK_ERROR_SUCCESS; - entry = fnSDFAT.dir_read(); +entry = fnSDFAT.dir_read(); if (entry != nullptr) { strlcpy(buf, entry->filename, len); @@ -176,10 +176,10 @@ bool NetworkProtocolSD::read_dir_entry(char *buf, unsigned short len) } Debug_printf("NetworkProtocolSD::read_dir_entry(len: %u) error: %d\r\n", len, error); - return NETWORK_ERROR_SUCCESS != error; + return NETWORK_ERROR_SUCCESS != error ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::close_file_handle() +netProtoErr_t NetworkProtocolSD::close_file_handle() { Debug_printf("NetworkProtocolSD:::close_file_handle()\r\n"); if (fh != nullptr) @@ -188,18 +188,18 @@ bool NetworkProtocolSD::close_file_handle() fh = nullptr; } error = NETWORK_ERROR_SUCCESS; - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::close_dir_handle() +netProtoErr_t NetworkProtocolSD::close_dir_handle() { Debug_printf("NetworkProtocolSD:::close_dir_handle()\r\n"); fnSDFAT.dir_close(); error = NETWORK_ERROR_SUCCESS; - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::write_file_handle(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolSD::write_file_handle(uint8_t *buf, unsigned short len) { error = NETWORK_ERROR_SUCCESS; @@ -207,7 +207,7 @@ bool NetworkProtocolSD::write_file_handle(uint8_t *buf, unsigned short len) errno_to_error(); // fwrite may not set errno! Debug_printf("NetworkProtocolSD::write_file_handle(len: %u) error: %d\r\n", len, error); - return NETWORK_ERROR_SUCCESS != error; + return NETWORK_ERROR_SUCCESS != error ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } @@ -232,30 +232,30 @@ uint8_t NetworkProtocolSD::special_inquiry(uint8_t cmd) return ret; } -bool NetworkProtocolSD::special_00(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSD::special_00(cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSD::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSD::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSD::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { interruptEnable = false; // no need for network interrupts // return error if SD is not mounted - if (check_fs()) return true; + if (check_fs()) return NETPROTO_ERR_UNSPECIFIED; if (NetworkProtocolFS::rename(url, cmdFrame) == true) - return true; + return NETPROTO_ERR_UNSPECIFIED; bool success = fnSDFAT.rename(filename.c_str(), destFilename.c_str()); if (!success) @@ -264,15 +264,15 @@ bool NetworkProtocolSD::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) error = NETWORK_ERROR_SUCCESS; Debug_printf("NetworkProtocolSD::rename(%s -> %s) error: %d\r\n", filename.c_str(), destFilename.c_str(), error); - return NETWORK_ERROR_SUCCESS != error; + return NETWORK_ERROR_SUCCESS != error ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSD::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { interruptEnable = false; // no need for network interrupts // return error if SD is not mounted - if (check_fs()) return true; + if (check_fs()) return NETPROTO_ERR_UNSPECIFIED; bool success = fnSDFAT.remove(url->path.c_str()); if (!success) @@ -281,15 +281,15 @@ bool NetworkProtocolSD::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) error = NETWORK_ERROR_SUCCESS; Debug_printf("NetworkProtocolSD::del(%s) error: %d\r\n", url->path.c_str(), error); - return NETWORK_ERROR_SUCCESS != error; + return NETWORK_ERROR_SUCCESS != error ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSD::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { interruptEnable = false; // no need for network interrupts // return error if SD is not mounted - if (check_fs()) return true; + if (check_fs()) return NETPROTO_ERR_UNSPECIFIED; bool success = fnSDFAT.mkdir(url->path.c_str()); if (!success) @@ -298,15 +298,15 @@ bool NetworkProtocolSD::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) error = NETWORK_ERROR_SUCCESS; Debug_printf("NetworkProtocolSD::mkdir(%s) error: %d\r\n", url->path.c_str(), error); - return NETWORK_ERROR_SUCCESS != error; + return NETWORK_ERROR_SUCCESS != error ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSD::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { interruptEnable = false; // no need for network interrupts // return error if SD is not mounted - if (check_fs()) return true; + if (check_fs()) return NETPROTO_ERR_UNSPECIFIED; bool success = fnSDFAT.rmdir(url->path.c_str()); if (!success) @@ -315,13 +315,13 @@ bool NetworkProtocolSD::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) error = NETWORK_ERROR_SUCCESS; Debug_printf("NetworkProtocolSD::rmdir(%s) error: %d\r\n", url->path.c_str(), error); - return NETWORK_ERROR_SUCCESS != error; + return NETWORK_ERROR_SUCCESS != error ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::stat() +netProtoErr_t NetworkProtocolSD::stat() { // return error if SD is not mounted - if (check_fs()) return true; + if (check_fs()) return NETPROTO_ERR_UNSPECIFIED; if (fh != nullptr) fileSize = FileSystem::filesize(fh); @@ -335,33 +335,33 @@ bool NetworkProtocolSD::stat() Debug_printf("NetworkProtocolSD::stat(%s) fileSize: %d\r\n", opened_url->path.c_str(), fileSize); - return fileSize < 0; + return fileSize < 0 ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolSD::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSD::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { interruptEnable = false; // no need for network interrupts Debug_printf("NetworkProtocolSD::lock(%s) - not implemented\r\n", url->path.c_str()); // return error if SD is not mounted - if (check_fs()) return true; + if (check_fs()) return NETPROTO_ERR_UNSPECIFIED; error = NETWORK_ERROR_NOT_IMPLEMENTED; - return true; + return NETPROTO_ERR_UNSPECIFIED; } -bool NetworkProtocolSD::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSD::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { interruptEnable = false; // no need for network interrupts Debug_printf("NetworkProtocolSD::unlock(%s) - not implemented\r\n", url->path.c_str()); // return error if SD is not mounted - if (check_fs()) return true; + if (check_fs()) return NETPROTO_ERR_UNSPECIFIED; error = NETWORK_ERROR_NOT_IMPLEMENTED; - return true; + return NETPROTO_ERR_UNSPECIFIED; } off_t NetworkProtocolSD::seek(off_t offset, int whence) diff --git a/lib/network-protocol/SD.h b/lib/network-protocol/SD.h index 05e83ad98..5bbc8a71d 100644 --- a/lib/network-protocol/SD.h +++ b/lib/network-protocol/SD.h @@ -27,14 +27,14 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd) override; + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame) override; + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; /** * @brief execute a command that returns a payload to the atari. @@ -42,14 +42,14 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; + netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; + netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief Rename file specified by incoming devicespec. @@ -57,7 +57,7 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Delete file specified by incoming devicespec. @@ -65,7 +65,7 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Make directory specified by incoming devicespec. @@ -73,7 +73,7 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Remove directory specified by incoming devicespec. @@ -81,7 +81,7 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief lock file specified by incoming devicespec. @@ -89,7 +89,7 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief unlock file specified by incoming devicespec. @@ -97,7 +97,7 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; protected: @@ -125,31 +125,31 @@ class NetworkProtocolSD : public NetworkProtocolFS * @brief Open file handle, set fd * @return FALSE if successful, TRUE on error. */ - virtual bool open_file_handle() override; + netProtoErr_t open_file_handle() override; /** * @brief Open directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool open_dir_handle() override; + netProtoErr_t open_dir_handle() override; /** * @brief Do FS mount: SD should be always mounted, SD is only checked here * @param url The URL to mount * @return false on no error, true on error. */ - virtual bool mount(PeoplesUrlParser *url) override; + netProtoErr_t mount(PeoplesUrlParser *url) override; /** * @brief Unmount FS: SD should stay mounted, nothing is done here * @return false on no error, true on error. */ - virtual bool umount() override; + netProtoErr_t umount() override; /** * @brief Translate filesystem error codes to Atari error codes. Sets error in Protocol. */ - virtual void fserror_to_error() override; + void fserror_to_error() override; /** * @brief Read from file handle @@ -157,14 +157,14 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param len the number of bytes requested * @return FALSE if success, TRUE if error */ - virtual bool read_file_handle(uint8_t *buf, unsigned short len) override; + netProtoErr_t read_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief read next directory entry. * @param buf the target buffer * @param len length of target buffer */ - virtual bool read_dir_entry(char *buf, unsigned short len) override; + netProtoErr_t read_dir_entry(char *buf, unsigned short len) override; /** * @brief for len requested, break up into number of required @@ -172,21 +172,21 @@ class NetworkProtocolSD : public NetworkProtocolFS * @param len Requested # of bytes. * @return TRUE on error, FALSE on success. */ - virtual bool write_file_handle(uint8_t *buf, unsigned short len) override; + netProtoErr_t write_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief close file handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_file_handle() override; + netProtoErr_t close_file_handle() override; /** * @brief Close directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_dir_handle() override; + netProtoErr_t close_dir_handle() override; - virtual off_t seek(off_t offset, int whence) override; + off_t seek(off_t offset, int whence) override; private: @@ -204,17 +204,17 @@ class NetworkProtocolSD : public NetworkProtocolFS * @brief Check if SD file system is running * @return FALSE if successful, TRUE on error. */ - bool check_fs(); + netProtoErr_t check_fs(); /** * @brief Translate stdlib's errno to protocol error code. */ - virtual void errno_to_error() override; + void errno_to_error() override; /** * @brief get status of file, filling in filesize. mount() must have already been called. */ - virtual bool stat() override; + netProtoErr_t stat() override; }; #endif /* NETWORKPROTOCOLSD_H */ diff --git a/lib/network-protocol/SMB.cpp b/lib/network-protocol/SMB.cpp index 0119f678f..81e4c695e 100755 --- a/lib/network-protocol/SMB.cpp +++ b/lib/network-protocol/SMB.cpp @@ -1,333 +1,333 @@ -/** - * NetworkProtocolSMB - * - * Implementation - */ - -#include "SMB.h" - -#include - -#include - -#include "../../include/debug.h" - -#include -#include -//#include - -#include "status_error_codes.h" -#include "utils.h" - -#include - -NetworkProtocolSMB::NetworkProtocolSMB(std::string *rx_buf, std::string *tx_buf, std::string *sp_buf) - : NetworkProtocolFS(rx_buf, tx_buf, sp_buf) -{ - rename_implemented = true; - delete_implemented = true; - mkdir_implemented = true; - rmdir_implemented = true; - Debug_printf("NetworkProtocolSMB::ctor\r\n"); - smb = smb2_init_context(); -} - -NetworkProtocolSMB::~NetworkProtocolSMB() -{ - Debug_printf("NetworkProtocolSMB::dtor\r\n"); - smb2_destroy_context(smb); -} - -bool NetworkProtocolSMB::open_file_handle() -{ - if (smb == nullptr) - { - Debug_printf("NetworkProtocolSMB::open_file_handle() - no smb context. aborting.\r\n"); - return true; - } - - // Determine flags - int flags = 0; - - switch (aux1_open) - { - case PROTOCOL_OPEN_READ: - flags = O_RDONLY; - break; - case PROTOCOL_OPEN_WRITE: - flags = O_WRONLY | O_CREAT; - break; - case PROTOCOL_OPEN_APPEND: - flags = O_APPEND | O_CREAT; - break; - case PROTOCOL_OPEN_READWRITE: - flags = O_RDWR; - break; - default: - Debug_printf("NetworkProtocolSMB::open_file_handle() - Uncaught aux1 %d", aux1_open); - } - - fh = smb2_open(smb, smb_url->path, flags); - - if (fh == nullptr) - { - Debug_printf("NetworkProtocolSMB::open_file_handle() - SMB Error %s\r\n", smb2_get_error(smb)); - fserror_to_error(); - return true; - } - - offset = 0; - - Debug_printf("DO WE FUCKING GET HERE?!\r\n"); - - return false; -} - -bool NetworkProtocolSMB::open_dir_handle() -{ - if ((smb_dir = smb2_opendir(smb, smb_url->path)) == nullptr) - { - Debug_printf("NetworkProtocolSMB::open_dir_handle() - ERROR: %s\r\n", smb2_get_error(smb)); - fserror_to_error(); - return true; - } - - return false; -} - -bool NetworkProtocolSMB::mount(PeoplesUrlParser *url) -{ - std::string openURL = url->url; - - // use mRawURL to bypass our normal URL processing. - if (openURL.find("SMB:") != std::string::npos) - { - openURL[0] = 's'; - openURL[1] = 'm'; - openURL[2] = 'b'; - } - -#if 0 - if (aux1_open == 6) // temporary - openURL = openURL.substr(0, openURL.find_last_of("/")); -#endif - - Debug_printf("NetworkProtocolSMB::mount() - openURL: %s\r\n", openURL.c_str()); - smb_url = smb2_parse_url(smb, openURL.c_str()); - if (smb_url == nullptr) - { - Debug_printf("aNetworkProtocolSMB::mount(%s) - failed to parse URL, SMB2 error: %s\n", openURL.c_str(), smb2_get_error(smb)); - fserror_to_error(); - return true; - } - - smb2_set_security_mode(smb, SMB2_NEGOTIATE_SIGNING_ENABLED); - - if (login != nullptr) - { - smb2_set_user(smb, login->c_str()); - smb2_set_password(smb, password->c_str()); - - if ((smb_error = smb2_connect_share(smb, smb_url->server, smb_url->share, login->c_str())) != 0) - { - Debug_printf("aNetworkProtocolSMB::mount(%s) - could not mount, SMB2 error: %s\r\n", openURL.c_str(), smb2_get_error(smb)); - fserror_to_error(); - return true; - } - } - else // no u/p - { - if ((smb_error = smb2_connect_share(smb, smb_url->server, smb_url->share, smb_url->user)) != 0) - { - Debug_printf("aNetworkProtocolSMB::mount(%s) - could not mount, SMB2 error: %s\r\n", openURL.c_str(), smb2_get_error(smb)); - fserror_to_error(); - return true; - } - } - - return false; -} - -bool NetworkProtocolSMB::umount() -{ - if (smb == nullptr) - return true; - - smb2_disconnect_share(smb); - - if (smb_url == nullptr) - return true; - - smb2_destroy_url(smb_url); - return false; -} - -void NetworkProtocolSMB::fserror_to_error() -{ - switch (smb_error) - { - default: - error = NETWORK_ERROR_GENERAL; - break; - } -} - -bool NetworkProtocolSMB::read_file_handle(uint8_t *buf, unsigned short len) -{ - int actual_len; - - if ((actual_len = smb2_pread(smb, fh, buf, len, offset)) != len) - { - fserror_to_error(); - return true; - } - - offset += actual_len; - - return false; -} - -bool NetworkProtocolSMB::read_dir_entry(char *buf, unsigned short len) -{ - ent = smb2_readdir(smb, smb_dir); - - if (ent == nullptr) - { - error = NETWORK_ERROR_END_OF_FILE; - return true; - } - - // Set filename to buffer - strcpy(buf, ent->name); - - // Get file size/type - fileSize = ent->st.smb2_size; - is_directory = ent->st.smb2_type == SMB2_TYPE_DIRECTORY; - - return false; -} - -bool NetworkProtocolSMB::close_file_handle() -{ - smb2_close(smb, fh); - return false; -} - -bool NetworkProtocolSMB::close_dir_handle() -{ - smb2_closedir(smb, smb_dir); - return false; -} - -bool NetworkProtocolSMB::write_file_handle(uint8_t *buf, unsigned short len) -{ - int actual_len; - - if ((actual_len = smb2_pwrite(smb, fh, buf, len, offset)) != len) - { - fserror_to_error(); - return true; - } - - offset += actual_len; - - return false; -} - -uint8_t NetworkProtocolSMB::special_inquiry(uint8_t cmd) -{ - return 0xff; -} - -bool NetworkProtocolSMB::special_00(cmdFrame_t *cmdFrame) -{ - return false; -} - -bool NetworkProtocolSMB::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) -{ - return false; -} - -bool NetworkProtocolSMB::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) -{ - return false; -} - -bool NetworkProtocolSMB::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) -{ - return false; -} - -bool NetworkProtocolSMB::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) -{ - return false; -} - -bool NetworkProtocolSMB::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) -{ - mount(url); - - if (smb2_mkdir(smb, smb_url->path) != 0) - { - fserror_to_error(); - Debug_printf("NetworkProtocolSMB::mkdir(%s) SMB error: %s\r\n",url->url.c_str(), smb2_get_error(smb)); - } - - umount(); - - return false; -} - -bool NetworkProtocolSMB::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) -{ - mount(url); - - if (smb2_rmdir(smb, smb_url->path) != 0) - { - fserror_to_error(); - Debug_printf("NetworkProtocolSMB::rmdir(%s) SMB error: %s\r\n",url->url.c_str(), smb2_get_error(smb)); - } - - umount(); - - return false; -} - -bool NetworkProtocolSMB::stat() -{ - struct smb2_stat_64 st; - - int ret = smb2_stat(smb, smb_url->path, &st); - - fileSize = st.smb2_size; - return ret != 0; -} - -bool NetworkProtocolSMB::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) -{ - return false; -} - -bool NetworkProtocolSMB::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) -{ - return false; -} - -off_t NetworkProtocolSMB::seek(off_t position, int whence) -{ - // fileSize isn't fileSize, it's bytes remaining. Call stat() to fix fileSize - stat(); - - if (whence == SEEK_SET) - offset = position; - else if (whence == SEEK_CUR) - offset += position; - else if (whence == SEEK_END) - offset = fileSize - position; - - fileSize -= offset; - receiveBuffer->clear(); - - return offset; -} +/** + * NetworkProtocolSMB + * + * Implementation + */ + +#include "SMB.h" + +#include + +#include + +#include "../../include/debug.h" + +#include +#include +//#include + +#include "status_error_codes.h" +#include "utils.h" + +#include + +NetworkProtocolSMB::NetworkProtocolSMB(std::string *rx_buf, std::string *tx_buf, std::string *sp_buf) + : NetworkProtocolFS(rx_buf, tx_buf, sp_buf) +{ + rename_implemented = true; + delete_implemented = true; + mkdir_implemented = true; + rmdir_implemented = true; + Debug_printf("NetworkProtocolSMB::ctor\r\n"); + smb = smb2_init_context(); +} + +NetworkProtocolSMB::~NetworkProtocolSMB() +{ + Debug_printf("NetworkProtocolSMB::dtor\r\n"); + smb2_destroy_context(smb); +} + +netProtoErr_t NetworkProtocolSMB::open_file_handle() +{ + if (smb == nullptr) + { + Debug_printf("NetworkProtocolSMB::open_file_handle() - no smb context. aborting.\r\n"); + return NETPROTO_ERR_UNSPECIFIED; + } + + // Determine flags + int flags = 0; + + switch (aux1_open) + { + case PROTOCOL_OPEN_READ: + flags = O_RDONLY; + break; + case PROTOCOL_OPEN_WRITE: + flags = O_WRONLY | O_CREAT; + break; + case PROTOCOL_OPEN_APPEND: + flags = O_APPEND | O_CREAT; + break; + case PROTOCOL_OPEN_READWRITE: + flags = O_RDWR; + break; + default: + Debug_printf("NetworkProtocolSMB::open_file_handle() - Uncaught aux1 %d", aux1_open); + } + + fh = smb2_open(smb, smb_url->path, flags); + + if (fh == nullptr) + { + Debug_printf("NetworkProtocolSMB::open_file_handle() - SMB Error %s\r\n", smb2_get_error(smb)); + fserror_to_error(); + return NETPROTO_ERR_UNSPECIFIED; + } + + offset = 0; + + Debug_printf("DO WE FUCKING GET HERE?!\r\n"); + + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::open_dir_handle() +{ + if ((smb_dir = smb2_opendir(smb, smb_url->path)) == nullptr) + { + Debug_printf("NetworkProtocolSMB::open_dir_handle() - ERROR: %s\r\n", smb2_get_error(smb)); + fserror_to_error(); + return NETPROTO_ERR_UNSPECIFIED; + } + + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::mount(PeoplesUrlParser *url) +{ + std::string openURL = url->url; + + // use mRawURL to bypass our normal URL processing. + if (openURL.find("SMB:") != std::string::npos) + { + openURL[0] = 's'; + openURL[1] = 'm'; + openURL[2] = 'b'; + } + +#if 0 + if (aux1_open == 6) // temporary + openURL = openURL.substr(0, openURL.find_last_of("/")); +#endif + + Debug_printf("NetworkProtocolSMB::mount() - openURL: %s\r\n", openURL.c_str()); + smb_url = smb2_parse_url(smb, openURL.c_str()); + if (smb_url == nullptr) + { + Debug_printf("aNetworkProtocolSMB::mount(%s) - failed to parse URL, SMB2 error: %s\n", openURL.c_str(), smb2_get_error(smb)); + fserror_to_error(); + return NETPROTO_ERR_UNSPECIFIED; + } + + smb2_set_security_mode(smb, SMB2_NEGOTIATE_SIGNING_ENABLED); + + if (login != nullptr) + { + smb2_set_user(smb, login->c_str()); + smb2_set_password(smb, password->c_str()); + + if ((smb_error = smb2_connect_share(smb, smb_url->server, smb_url->share, login->c_str())) != 0) + { + Debug_printf("aNetworkProtocolSMB::mount(%s) - could not mount, SMB2 error: %s\r\n", openURL.c_str(), smb2_get_error(smb)); + fserror_to_error(); + return NETPROTO_ERR_UNSPECIFIED; + } + } + else // no u/p + { + if ((smb_error = smb2_connect_share(smb, smb_url->server, smb_url->share, smb_url->user)) != 0) + { + Debug_printf("aNetworkProtocolSMB::mount(%s) - could not mount, SMB2 error: %s\r\n", openURL.c_str(), smb2_get_error(smb)); + fserror_to_error(); + return NETPROTO_ERR_UNSPECIFIED; + } + } + + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::umount() +{ + if (smb == nullptr) + return NETPROTO_ERR_UNSPECIFIED; + + smb2_disconnect_share(smb); + + if (smb_url == nullptr) + return NETPROTO_ERR_UNSPECIFIED; + + smb2_destroy_url(smb_url); + return NETPROTO_ERR_NONE; +} + +void NetworkProtocolSMB::fserror_to_error() +{ + switch (smb_error) + { + default: + error = NETWORK_ERROR_GENERAL; + break; + } +} + +netProtoErr_t NetworkProtocolSMB::read_file_handle(uint8_t *buf, unsigned short len) +{ + int actual_len; + + if ((actual_len = smb2_pread(smb, fh, buf, len, offset)) != len) + { + fserror_to_error(); + return NETPROTO_ERR_UNSPECIFIED; + } + + offset += actual_len; + + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::read_dir_entry(char *buf, unsigned short len) +{ + ent = smb2_readdir(smb, smb_dir); + + if (ent == nullptr) + { + error = NETWORK_ERROR_END_OF_FILE; + return NETPROTO_ERR_UNSPECIFIED; + } + + // Set filename to buffer + strcpy(buf, ent->name); + + // Get file size/type + fileSize = ent->st.smb2_size; + is_directory = ent->st.smb2_type == SMB2_TYPE_DIRECTORY; + + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::close_file_handle() +{ + smb2_close(smb, fh); + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::close_dir_handle() +{ + smb2_closedir(smb, smb_dir); + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::write_file_handle(uint8_t *buf, unsigned short len) +{ + int actual_len; + + if ((actual_len = smb2_pwrite(smb, fh, buf, len, offset)) != len) + { + fserror_to_error(); + return NETPROTO_ERR_UNSPECIFIED; + } + + offset += actual_len; + + return NETPROTO_ERR_NONE; +} + +uint8_t NetworkProtocolSMB::special_inquiry(uint8_t cmd) +{ + return 0xff; +} + +netProtoErr_t NetworkProtocolSMB::special_00(cmdFrame_t *cmdFrame) +{ + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +{ + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +{ + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +{ + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +{ + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +{ + mount(url); + + if (smb2_mkdir(smb, smb_url->path) != 0) + { + fserror_to_error(); + Debug_printf("NetworkProtocolSMB::mkdir(%s) SMB error: %s\r\n",url->url.c_str(), smb2_get_error(smb)); + } + + umount(); + + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +{ + mount(url); + + if (smb2_rmdir(smb, smb_url->path) != 0) + { + fserror_to_error(); + Debug_printf("NetworkProtocolSMB::rmdir(%s) SMB error: %s\r\n",url->url.c_str(), smb2_get_error(smb)); + } + + umount(); + + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::stat() +{ + struct smb2_stat_64 st; + + int ret = smb2_stat(smb, smb_url->path, &st); + + fileSize = st.smb2_size; + return ret != 0 ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +{ + return NETPROTO_ERR_NONE; +} + +netProtoErr_t NetworkProtocolSMB::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +{ + return NETPROTO_ERR_NONE; +} + +off_t NetworkProtocolSMB::seek(off_t position, int whence) +{ + // fileSize isn't fileSize, it's bytes remaining. Call stat() to fix fileSize + stat(); + + if (whence == SEEK_SET) + offset = position; + else if (whence == SEEK_CUR) + offset += position; + else if (whence == SEEK_END) + offset = fileSize - position; + + fileSize -= offset; + receiveBuffer->clear(); + + return offset; +} diff --git a/lib/network-protocol/SMB.h b/lib/network-protocol/SMB.h index ef6167749..f592ecf2e 100755 --- a/lib/network-protocol/SMB.h +++ b/lib/network-protocol/SMB.h @@ -26,14 +26,14 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd) override; + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame) override; + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; /** * @brief execute a command that returns a payload to the atari. @@ -41,14 +41,14 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; + netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; + netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief Rename file specified by incoming devicespec. @@ -56,7 +56,7 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Delete file specified by incoming devicespec. @@ -64,7 +64,7 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Make directory specified by incoming devicespec. @@ -72,7 +72,7 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Remove directory specified by incoming devicespec. @@ -80,7 +80,7 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief lock file specified by incoming devicespec. @@ -88,7 +88,7 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief unlock file specified by incoming devicespec. @@ -96,9 +96,9 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; - virtual off_t seek(off_t offset, int whence) override; + off_t seek(off_t offset, int whence) override; protected: @@ -126,31 +126,31 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @brief Open file handle, set fd * @return FALSE if successful, TRUE on error. */ - virtual bool open_file_handle() override; + netProtoErr_t open_file_handle() override; /** * @brief Open directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool open_dir_handle() override; + netProtoErr_t open_dir_handle() override; /** * @brief Do SMB mount * @param url The URL to mount * @return false on no error, true on error. */ - virtual bool mount(PeoplesUrlParser *url) override; + netProtoErr_t mount(PeoplesUrlParser *url) override; /** * @brief Unmount SMB server specified in mountInfo. * @return false on no error, true on error. */ - virtual bool umount() override; + netProtoErr_t umount() override; /** * @brief Translate filesystem error codes to Atari error codes. Sets error in Protocol. */ - virtual void fserror_to_error() override; + void fserror_to_error() override; /** * @brief Read from file handle @@ -158,14 +158,14 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param len the number of bytes requested * @return FALSE if success, TRUE if error */ - virtual bool read_file_handle(uint8_t *buf, unsigned short len) override; + netProtoErr_t read_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief read next directory entry. * @param buf the target buffer * @param len length of target buffer */ - virtual bool read_dir_entry(char *buf, unsigned short len) override; + netProtoErr_t read_dir_entry(char *buf, unsigned short len) override; /** * @brief for len requested, break up into number of required @@ -173,19 +173,19 @@ class NetworkProtocolSMB : public NetworkProtocolFS * @param len Requested # of bytes. * @return TRUE on error, FALSE on success. */ - virtual bool write_file_handle(uint8_t *buf, unsigned short len) override; + netProtoErr_t write_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief close file handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_file_handle() override; + netProtoErr_t close_file_handle() override; /** * @brief Close directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_dir_handle() override; + netProtoErr_t close_dir_handle() override; private: /** @@ -226,7 +226,7 @@ class NetworkProtocolSMB : public NetworkProtocolFS /** * @brief get status of file, filling in filesize. mount() must have already been called. */ - virtual bool stat() override; + netProtoErr_t stat() override; }; #endif /* NETWORKPROTOCOLSMB_H */ diff --git a/lib/network-protocol/SSH.cpp b/lib/network-protocol/SSH.cpp index 35af938a1..e5f4b49c4 100755 --- a/lib/network-protocol/SSH.cpp +++ b/lib/network-protocol/SSH.cpp @@ -33,7 +33,7 @@ NetworkProtocolSSH::~NetworkProtocolSSH() #endif } -bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) { NetworkProtocol::open(urlParser, cmdFrame); int ret; @@ -49,7 +49,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) if (!login || !password || (login->empty() && password->empty())) { error = NETWORK_ERROR_INVALID_USERNAME_OR_PASSWORD; - return true; + return NETPROTO_ERR_UNSPECIFIED; } // Port 22 by default. @@ -62,7 +62,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) { Debug_printf("NetworkProtocolSSH::open() - ssh_init not successful. Value returned: %d\r\n", ret); error = NETWORK_ERROR_GENERAL; - return true; + return NETPROTO_ERR_UNSPECIFIED; } Debug_printf("NetworkProtocolSSH::open() - Opening session.\r\n"); @@ -71,7 +71,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) { Debug_printf("Could not create session. aborting.\r\n"); error = NETWORK_ERROR_NOT_CONNECTED; - return true; + return NETPROTO_ERR_UNSPECIFIED; } int verbosity = SSH_LOG_PROTOCOL; @@ -90,7 +90,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) error = NETWORK_ERROR_NOT_CONNECTED; const char *message = ssh_get_error(session); Debug_printf("NetworkProtocolSSH::open() - Could not connect, error: %s.\r\n", message); - return true; + return NETPROTO_ERR_UNSPECIFIED; } ssh_key srv_pubkey = NULL; @@ -99,7 +99,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) error = NETWORK_ERROR_GENERAL; const char *message = ssh_get_error(session); Debug_printf("NetworkProtocolSSH::open() - Could not get server ssh public key, error: %s.\r\n", message); - return true; + return NETPROTO_ERR_UNSPECIFIED; } size_t hlen; @@ -111,9 +111,9 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) error = NETWORK_ERROR_GENERAL; const char *message = ssh_get_error(session); Debug_printf("NetworkProtocolSSH::open() - Could not get server ssh public key hash, error: %s.\r\n", message); - return true; + return NETPROTO_ERR_UNSPECIFIED; } - + // TODO: We really should be first checking this is a known server to stop MITM attacks etc. before continuing // Minimally we could check the fingerprint is in a known list, as we don't really have known_hosts file. ssh_key_free(srv_pubkey); @@ -136,7 +136,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) error = NETWORK_ERROR_GENERAL; const char *message = ssh_get_error(session); Debug_printf("NetworkProtocolSSH::open() - Could not issue 'none' userauth method to server, error: %s.\r\n", message); - return true; + return NETPROTO_ERR_UNSPECIFIED; } ret = ssh_userauth_list(session, NULL); @@ -148,7 +148,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) "Password: %s\r\n" "Public Key: %s\r\n" "Host Based: %s\r\n" - "Interactive: %s\r\n", + "Interactive: %s\r\n", allowsPassword ? "true":"false", allowsPublicKey ? "true":"false", allowsHostBased ? "true":"false", @@ -159,7 +159,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) // May as well stop here, as our only ability (password) isn't allowed error = NETWORK_ERROR_GENERAL; Debug_printf("NetworkProtocolSSH::open() - Could not login to server as it does not allow password auth.\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } ret = ssh_userauth_password(session, NULL, password->c_str()); @@ -178,14 +178,14 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) error = NETWORK_ERROR_GENERAL; const char *message = ssh_get_error(session); Debug_printf("NetworkProtocolSSH::open() - Could not open new channel, error: %s.\r\n", message); - return true; + return NETPROTO_ERR_UNSPECIFIED; } ret = ssh_channel_open_session(channel); if (ret != SSH_OK) { error = NETWORK_ERROR_GENERAL; const char *message = ssh_get_error(session); Debug_printf("NetworkProtocolSSH::open() - Could not open session, error: %s.\r\n", message); - return true; + return NETPROTO_ERR_UNSPECIFIED; } @@ -194,7 +194,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) { error = NETWORK_ERROR_GENERAL; Debug_printf("Could not request pty\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } ret = ssh_channel_request_shell(channel); @@ -202,7 +202,7 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) { error = NETWORK_ERROR_GENERAL; Debug_printf("Could not open shell on channel\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } ssh_channel_set_blocking(channel, 0); @@ -210,44 +210,44 @@ bool NetworkProtocolSSH::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) // At this point, we should be able to talk to the shell. Debug_printf("Shell opened.\r\n"); - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSSH::close() +netProtoErr_t NetworkProtocolSSH::close() { ssh_disconnect(session); ssh_free(session); - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSSH::read(unsigned short len) +netProtoErr_t NetworkProtocolSSH::read(unsigned short len) { // Ironically, All of the read is handled in available(). - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSSH::write(unsigned short len) +netProtoErr_t NetworkProtocolSSH::write(unsigned short len) { - bool err = false; + netProtoErr_t err = NETPROTO_ERR_NONE; len = translate_transmit_buffer(); ssh_channel_write(channel, transmitBuffer->data(), len); // Return success - WTF? - error = 1; + error = NETPROTO_ERR_UNSPECIFIED; transmitBuffer->erase(0, len); return err; } -bool NetworkProtocolSSH::status(NetworkStatus *status) +netProtoErr_t NetworkProtocolSSH::status(NetworkStatus *status) { status->rxBytesWaiting = available(); bool isEOF = ssh_channel_is_eof(channel) == 0; status->connected = isEOF ? 1 : 0; status->error = isEOF ? 1 : NETWORK_ERROR_END_OF_FILE; NetworkProtocol::status(status); - return false; + return NETPROTO_ERR_NONE; } uint8_t NetworkProtocolSSH::special_inquiry(uint8_t cmd) @@ -255,19 +255,19 @@ uint8_t NetworkProtocolSSH::special_inquiry(uint8_t cmd) return 0xFF; // selected command not implemented. } -bool NetworkProtocolSSH::special_00(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSSH::special_00(cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSSH::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSSH::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolSSH::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolSSH::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } unsigned short NetworkProtocolSSH::available() diff --git a/lib/network-protocol/SSH.h b/lib/network-protocol/SSH.h index 308718220..f5d11b56d 100755 --- a/lib/network-protocol/SSH.h +++ b/lib/network-protocol/SSH.h @@ -41,47 +41,47 @@ class NetworkProtocolSSH : public NetworkProtocol * @param urlParser The URL object passed in to open. * @param cmdFrame The command frame to extract aux1/aux2/etc. */ - virtual bool open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame); + netProtoErr_t open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) override; /** * @brief Close connection to the protocol. */ - virtual bool close(); + netProtoErr_t close() override; /** * @brief Read len bytes into rx_buf, If protocol times out, the buffer should be null padded to length. * @param len Number of bytes to read. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool read(unsigned short len); + netProtoErr_t read(unsigned short len) override; /** * @brief Write len bytes from tx_buf to protocol. * @param len The # of bytes to transmit, len should not be larger than buffer. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool write(unsigned short len); + netProtoErr_t write(unsigned short len) override; /** * @brief Return protocol status information in provided NetworkStatus object. * @param status a pointer to a NetworkStatus object to receive status information * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool status(NetworkStatus *status); + netProtoErr_t status(NetworkStatus *status) override; /** * @brief Return a DSTATS byte for a requested COMMAND byte. * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd); + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame); + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; /** * @brief execute a command that returns a payload to the atari. @@ -89,14 +89,14 @@ class NetworkProtocolSSH : public NetworkProtocol * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; private: /** @@ -136,4 +136,4 @@ class NetworkProtocolSSH : public NetworkProtocol unsigned short available(); }; -#endif /* NETWORKPROTOCOL_SSH */ \ No newline at end of file +#endif /* NETWORKPROTOCOL_SSH */ diff --git a/lib/network-protocol/TCP.cpp b/lib/network-protocol/TCP.cpp index db7e833ea..9170b8624 100755 --- a/lib/network-protocol/TCP.cpp +++ b/lib/network-protocol/TCP.cpp @@ -1,6 +1,6 @@ /** * NetworkProtocolTCP - * + * * TCP Protocol Adapter Implementation */ @@ -51,9 +51,9 @@ NetworkProtocolTCP::~NetworkProtocolTCP() * @param urlParser The URL object passed in to open. * @param cmdFrame The command frame to extract aux1/aux2/etc. */ -bool NetworkProtocolTCP::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTCP::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) { - bool ret = true; // assume error until proven ok + netProtoErr_t ret = NETPROTO_ERR_UNSPECIFIED; // assume error until proven ok Debug_printf("NetworkProtocolTCP::open(%s:%s)\r\n", urlParser->host.c_str(), urlParser->port.c_str()); @@ -65,7 +65,7 @@ bool NetworkProtocolTCP::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) else { Debug_printf("Empty socket enabled.\r\n"); - ret = false; // No error. + ret = NETPROTO_ERR_NONE; // No error. } } else @@ -86,7 +86,7 @@ bool NetworkProtocolTCP::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) /** * @brief Close connection to the protocol. */ -bool NetworkProtocolTCP::close() +netProtoErr_t NetworkProtocolTCP::close() { Debug_printf("NetworkProtocolTCP::close()\r\n"); @@ -104,7 +104,7 @@ bool NetworkProtocolTCP::close() server->stop(); } - return false; + return NETPROTO_ERR_NONE; } /** @@ -112,7 +112,7 @@ bool NetworkProtocolTCP::close() * @param len number of bytes to read. * @return error flag. FALSE if successful, TRUE if error. */ -bool NetworkProtocolTCP::read(unsigned short len) +netProtoErr_t NetworkProtocolTCP::read(unsigned short len) { unsigned short actual_len = 0; std::vector newData = std::vector(len); @@ -125,7 +125,7 @@ bool NetworkProtocolTCP::read(unsigned short len) if (!client.connected()) { error = NETWORK_ERROR_NOT_CONNECTED; - return true; // error + return NETPROTO_ERR_UNSPECIFIED; // error } // Do the read from client socket. @@ -135,18 +135,18 @@ bool NetworkProtocolTCP::read(unsigned short len) if (errno == ECONNRESET) { error = NETWORK_ERROR_CONNECTION_RESET; - return true; + return NETPROTO_ERR_UNSPECIFIED; } else if (actual_len != len) // Read was short and timed out. { Debug_printf("Short receive. We got %u bytes, returning %u bytes and ERROR\r\n", actual_len, len); error = NETWORK_ERROR_SOCKET_TIMEOUT; - return true; + return NETPROTO_ERR_UNSPECIFIED; } // Add new data to buffer. receiveBuffer->insert(receiveBuffer->end(), newData.begin(), newData.end()); - } + } error = 1; return NetworkProtocol::read(len); } @@ -156,7 +156,7 @@ bool NetworkProtocolTCP::read(unsigned short len) * @param len The # of bytes to transmit, len should not be larger than buffer. * @return Number of bytes written. */ -bool NetworkProtocolTCP::write(unsigned short len) +netProtoErr_t NetworkProtocolTCP::write(unsigned short len) { int actual_len = 0; @@ -166,7 +166,7 @@ bool NetworkProtocolTCP::write(unsigned short len) if (!client.connected()) { error = NETWORK_ERROR_NOT_CONNECTED; - return len; // error + return NETPROTO_ERR_UNSPECIFIED; // error } // Call base class to do translation. @@ -179,20 +179,20 @@ bool NetworkProtocolTCP::write(unsigned short len) if (errno == ECONNRESET) { error = NETWORK_ERROR_CONNECTION_RESET; - return len; + return NETPROTO_ERR_UNSPECIFIED; } else if (actual_len != len) // write was short. { Debug_printf("Short send. We sent %u bytes, but asked to send %u bytes.\r\n", actual_len, len); error = NETWORK_ERROR_SOCKET_TIMEOUT; - return true; + return NETPROTO_ERR_UNSPECIFIED; } // Return success error = 1; transmitBuffer->erase(0, len); - return false; + return NETPROTO_ERR_NONE; } /** @@ -200,7 +200,7 @@ bool NetworkProtocolTCP::write(unsigned short len) * @param status a pointer to a NetworkStatus object to receive status information * @return error flag. FALSE if successful, TRUE if error. */ -bool NetworkProtocolTCP::status(NetworkStatus *status) +netProtoErr_t NetworkProtocolTCP::status(NetworkStatus *status) { if (connectionIsServer == true) status_server(status); @@ -209,7 +209,7 @@ bool NetworkProtocolTCP::status(NetworkStatus *status) NetworkProtocol::status(status); - return false; + return NETPROTO_ERR_NONE; } void NetworkProtocolTCP::status_client(NetworkStatus *status) @@ -255,7 +255,7 @@ uint8_t NetworkProtocolTCP::special_inquiry(uint8_t cmd) * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ -bool NetworkProtocolTCP::special_00(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTCP::special_00(cmdFrame_t *cmdFrame) { Debug_printf("NetworkProtocolTCP::special_00(%c)\n",cmdFrame->comnd); @@ -269,7 +269,7 @@ bool NetworkProtocolTCP::special_00(cmdFrame_t *cmdFrame) return special_close_client_connection(); break; } - return true; // error + return NETPROTO_ERR_UNSPECIFIED; // error } /** @@ -278,9 +278,9 @@ bool NetworkProtocolTCP::special_00(cmdFrame_t *cmdFrame) * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ -bool NetworkProtocolTCP::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTCP::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } /** @@ -288,9 +288,9 @@ bool NetworkProtocolTCP::special_40(uint8_t *sp_buf, unsigned short len, cmdFram * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ -bool NetworkProtocolTCP::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTCP::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } /** @@ -298,7 +298,7 @@ bool NetworkProtocolTCP::special_80(uint8_t *sp_buf, unsigned short len, cmdFram * @param port bind to port # * @return error flag. TRUE on error. FALSE on success. */ -bool NetworkProtocolTCP::open_server(unsigned short port) +netProtoErr_t NetworkProtocolTCP::open_server(unsigned short port) { Debug_printf("Binding to port %d\r\n", port); @@ -309,10 +309,10 @@ bool NetworkProtocolTCP::open_server(unsigned short port) { Debug_printf("errno = %u\r\n", errno); errno_to_error(); - return true; + return NETPROTO_ERR_UNSPECIFIED; } - return false; + return NETPROTO_ERR_NONE; } /** @@ -321,7 +321,7 @@ bool NetworkProtocolTCP::open_server(unsigned short port) * @param port the port number to connect to. * @return error flag. TRUE on erorr. FALSE on success. */ -bool NetworkProtocolTCP::open_client(std::string hostname, unsigned short port) +netProtoErr_t NetworkProtocolTCP::open_client(std::string hostname, unsigned short port) { int res = 0; @@ -338,22 +338,22 @@ bool NetworkProtocolTCP::open_client(std::string hostname, unsigned short port) if (res == 0) { errno_to_error(); - return true; // Error. + return NETPROTO_ERR_UNSPECIFIED; // Error. } else - return false; // We're connected. + return NETPROTO_ERR_NONE; // We're connected. } /** * Special: Accept a server connection, transfer to client socket. */ -bool NetworkProtocolTCP::special_accept_connection() +netProtoErr_t NetworkProtocolTCP::special_accept_connection() { if (server == nullptr) { Debug_printf("Attempted accept connection on NULL server socket. Aborting.\r\n"); error = NETWORK_ERROR_SERVER_NOT_RUNNING; - return true; // Error + return NETPROTO_ERR_UNSPECIFIED; // Error } if (server->hasClient()) @@ -370,25 +370,25 @@ bool NetworkProtocolTCP::special_accept_connection() remotePort = client.remotePort(); remoteIPString = compat_inet_ntoa(remoteIP); Debug_printf("Accepted connection from %s:%u\r\n", remoteIPString, remotePort); - return false; + return NETPROTO_ERR_NONE; } else { error = NETWORK_ERROR_CONNECTION_RESET; Debug_printf("Client immediately disconnected.\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } } // Otherwise, we are calling accept on a connection that isn't available. error = NETWORK_ERROR_NO_CONNECTION_WAITING; - return true; + return NETPROTO_ERR_UNSPECIFIED; } /** * Special: Accept a server connection, transfer to client socket. */ -bool NetworkProtocolTCP::special_close_client_connection() +netProtoErr_t NetworkProtocolTCP::special_close_client_connection() { in_addr_t remoteIP; unsigned char remotePort; @@ -398,14 +398,14 @@ bool NetworkProtocolTCP::special_close_client_connection() { Debug_printf("Attempted close client connection on NULL server socket. Aborting.\r\n"); error = NETWORK_ERROR_SERVER_NOT_RUNNING; - return false; + return NETPROTO_ERR_NONE; } if (!client.connected()) { Debug_printf("Attempted close client with no client connected.\r\n"); error = NETWORK_ERROR_NOT_CONNECTED; - return false; + return NETPROTO_ERR_NONE; } remoteIP = client.remoteIP(); @@ -421,5 +421,5 @@ bool NetworkProtocolTCP::special_close_client_connection() client.stop(); - return false; + return NETPROTO_ERR_UNSPECIFIED; } diff --git a/lib/network-protocol/TCP.h b/lib/network-protocol/TCP.h index 1f880b73a..b20732765 100755 --- a/lib/network-protocol/TCP.h +++ b/lib/network-protocol/TCP.h @@ -28,47 +28,47 @@ class NetworkProtocolTCP : public NetworkProtocol * @param urlParser The URL object passed in to open. * @param cmdFrame The command frame to extract aux1/aux2/etc. */ - virtual bool open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame); + netProtoErr_t open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) override; /** * @brief Close connection to the protocol. */ - virtual bool close(); + netProtoErr_t close() override; /** * @brief Read len bytes into rx_buf, If protocol times out, the buffer should be null padded to length. * @param len Number of bytes to read. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool read(unsigned short len); + netProtoErr_t read(unsigned short len) override; /** * @brief Write len bytes from tx_buf to protocol. * @param len The # of bytes to transmit, len should not be larger than buffer. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool write(unsigned short len); + netProtoErr_t write(unsigned short len) override; /** * @brief Return protocol status information in provided NetworkStatus object. * @param status a pointer to a NetworkStatus object to receive status information * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool status(NetworkStatus *status); + netProtoErr_t status(NetworkStatus *status) override; /** * @brief Return a DSTATS byte for a requested COMMAND byte. * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd); + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame); + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; /** * @brief execute a command that returns a payload to the atari. @@ -76,14 +76,14 @@ class NetworkProtocolTCP : public NetworkProtocol * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; protected: /** @@ -102,7 +102,7 @@ class NetworkProtocolTCP : public NetworkProtocol * @param port bind to port # * @return error flag. TRUE on error. FALSE on success. */ - bool open_server(unsigned short port); + netProtoErr_t open_server(unsigned short port); /** * Open a client connection to host and port. @@ -110,17 +110,17 @@ class NetworkProtocolTCP : public NetworkProtocol * @param port the port number to connect to. * @return error flag. TRUE on erorr. FALSE on success. */ - bool open_client(std::string hostname, unsigned short port); + netProtoErr_t open_client(std::string hostname, unsigned short port); /** * Special: Accept a server connection, transfer to client socket. */ - bool special_accept_connection(); + netProtoErr_t special_accept_connection(); /** * Special: Close client connection. */ - bool special_close_client_connection(); + netProtoErr_t special_close_client_connection(); /** * Return status of client connection @@ -133,7 +133,7 @@ class NetworkProtocolTCP : public NetworkProtocol * @param status pointer to destination NetworkStatus object */ void status_client(NetworkStatus* status); - + }; -#endif /* NETWORKPROTOCOL_TCP */ \ No newline at end of file +#endif /* NETWORKPROTOCOL_TCP */ diff --git a/lib/network-protocol/TNFS.cpp b/lib/network-protocol/TNFS.cpp index 6d72d9362..d78738314 100755 --- a/lib/network-protocol/TNFS.cpp +++ b/lib/network-protocol/TNFS.cpp @@ -1,6 +1,6 @@ /** * NetworkProtocolTNFS - * + * * Implementation */ @@ -30,7 +30,7 @@ NetworkProtocolTNFS::~NetworkProtocolTNFS() Debug_printf("NetworkProtocolTNFS::dtor\r\n"); } -bool NetworkProtocolTNFS::open_file_handle() +netProtoErr_t NetworkProtocolTNFS::open_file_handle() { // Map aux1 to mode and perms for tnfs_open() switch (aux1_open) @@ -59,20 +59,20 @@ bool NetworkProtocolTNFS::open_file_handle() Debug_printf("NetworkProtocolTNFS::open_file_handle(mode: %d perms %d) - %d\r\n", mode, perms, tnfs_error); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::open_dir_handle() +netProtoErr_t NetworkProtocolTNFS::open_dir_handle() { tnfs_error = tnfs_opendirx(&mountInfo, dir.c_str(), 0, 0, filename.c_str(), 0); fserror_to_error(); Debug_printf("NetworkProtocolTNFS::open_dir_handle(%s, %s) - %d\r\n", dir.c_str(), filename.c_str(), tnfs_error); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::mount(PeoplesUrlParser *url) +netProtoErr_t NetworkProtocolTNFS::mount(PeoplesUrlParser *url) { strcpy(mountInfo.hostname, url->host.c_str()); strcpy(mountInfo.mountpath, "/"); @@ -82,15 +82,15 @@ bool NetworkProtocolTNFS::mount(PeoplesUrlParser *url) Debug_printf("NetworkProtocolTNFS::mount(%s,%s) - %d\r\n", url->host.c_str(), url->path.c_str(), tnfs_error); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::umount() +netProtoErr_t NetworkProtocolTNFS::umount() { Debug_printf("NetworkProtocolTNFS::umount()\r\n"); tnfs_umount(&mountInfo); - return false; // always success. + return NETPROTO_ERR_NONE; // always success. } void NetworkProtocolTNFS::fserror_to_error() @@ -125,7 +125,7 @@ void NetworkProtocolTNFS::fserror_to_error() } } -bool NetworkProtocolTNFS::read_file_handle(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolTNFS::read_file_handle(uint8_t *buf, unsigned short len) { unsigned short total_len = len; unsigned short block_len = TNFS_MAX_READWRITE_PAYLOAD; @@ -144,7 +144,7 @@ bool NetworkProtocolTNFS::read_file_handle(uint8_t *buf, unsigned short len) if (tnfs_error != 0) { fserror_to_error(); - return true; // error. + return NETPROTO_ERR_UNSPECIFIED; // error. } else { @@ -156,10 +156,10 @@ bool NetworkProtocolTNFS::read_file_handle(uint8_t *buf, unsigned short len) Debug_printf("NetworkProtocolTNFS::read_file_handle(B: %d, A: %d, T: %d)\r\n", block_len, actual_len, total_len); fserror_to_error(); - return tnfs_error != TNFS_RESULT_SUCCESS; // no error + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::read_dir_entry(char *buf, unsigned short len) +netProtoErr_t NetworkProtocolTNFS::read_dir_entry(char *buf, unsigned short len) { tnfs_error = tnfs_readdirx(&mountInfo, &fileStat, buf, len); fileSize = fileStat.filesize; @@ -168,27 +168,27 @@ bool NetworkProtocolTNFS::read_dir_entry(char *buf, unsigned short len) is_locked = (fileStat.mode & 0200); fserror_to_error(); Debug_printf("NetworkProtocolTNFS::read_dir_entry(N: %s, F: %d, M: %d, D: %d, L: %d) - %d\r\n", buf, fileSize, mode, is_directory, is_locked, tnfs_error); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::close_file_handle() +netProtoErr_t NetworkProtocolTNFS::close_file_handle() { if (fd != 0) tnfs_error = tnfs_close(&mountInfo, fd); fserror_to_error(); Debug_printf("NetworkProtocolTNFS::close_file_handle(%u) - %d\r\n", fd, tnfs_error); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::close_dir_handle() +netProtoErr_t NetworkProtocolTNFS::close_dir_handle() { tnfs_error = tnfs_closedir(&mountInfo); fserror_to_error(); Debug_printf("NetworkProtocolTNFS::close_dir_handle() - %d\r\n", tnfs_error); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::write_file_handle(uint8_t *buf, unsigned short len) +netProtoErr_t NetworkProtocolTNFS::write_file_handle(uint8_t *buf, unsigned short len) { unsigned short total_len = len; unsigned short block_len = TNFS_MAX_READWRITE_PAYLOAD; @@ -214,7 +214,7 @@ bool NetworkProtocolTNFS::write_file_handle(uint8_t *buf, unsigned short len) Debug_printf("NetworkProtocolTNFS::write_file_handle(B: %d, A: %d, T: %d)\r\n", block_len, actual_len, total_len); } - return tnfs_error != TNFS_RESULT_SUCCESS; // no error + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } uint8_t NetworkProtocolTNFS::special_inquiry(uint8_t cmd) @@ -238,7 +238,7 @@ uint8_t NetworkProtocolTNFS::special_inquiry(uint8_t cmd) return ret; } -bool NetworkProtocolTNFS::special_00(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTNFS::special_00(cmdFrame_t *cmdFrame) { switch (cmdFrame->comnd) { @@ -247,7 +247,7 @@ bool NetworkProtocolTNFS::special_00(cmdFrame_t *cmdFrame) } } -bool NetworkProtocolTNFS::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTNFS::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { switch (cmdFrame->comnd) { @@ -256,15 +256,15 @@ bool NetworkProtocolTNFS::special_40(uint8_t *sp_buf, unsigned short len, cmdFra } } -bool NetworkProtocolTNFS::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTNFS::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTNFS::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { if (NetworkProtocolFS::rename(url, cmdFrame) == true) - return true; + return NETPROTO_ERR_NONE; mount(url); @@ -275,10 +275,10 @@ bool NetworkProtocolTNFS::rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) umount(); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTNFS::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { mount(url); @@ -289,10 +289,10 @@ bool NetworkProtocolTNFS::del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) umount(); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTNFS::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { Debug_printf("NetworkProtocolTNFS::mkdir(%s,%s)", url->host.c_str(), url->path.c_str()); @@ -303,10 +303,10 @@ bool NetworkProtocolTNFS::mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) if (tnfs_error != TNFS_RESULT_SUCCESS) fserror_to_error(); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTNFS::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { mount(url); @@ -315,10 +315,10 @@ bool NetworkProtocolTNFS::rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) if (tnfs_error != TNFS_RESULT_SUCCESS) fserror_to_error(); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::stat() +netProtoErr_t NetworkProtocolTNFS::stat() { tnfs_error = tnfs_stat(&mountInfo, &fileStat, opened_url->path.c_str()); fileSize = fileStat.filesize; @@ -327,10 +327,10 @@ bool NetworkProtocolTNFS::stat() Debug_printf("NetworkProtocolTNFS::stat(F: %d, M: %d, D: %d, L: %d) - %d\r\n", fileSize, mode, is_directory, is_locked, tnfs_error); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTNFS::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { Debug_printf("lock: %s\r\n", url->path.c_str()); tnfs_error = tnfs_chmod(&mountInfo, url->path.c_str(), 0444); @@ -338,17 +338,17 @@ bool NetworkProtocolTNFS::lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) if (tnfs_error != TNFS_RESULT_SUCCESS) fserror_to_error(); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } -bool NetworkProtocolTNFS::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTNFS::unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) { tnfs_error = tnfs_chmod(&mountInfo, url->path.c_str(), 0644); if (tnfs_error != TNFS_RESULT_SUCCESS) fserror_to_error(); - return tnfs_error != TNFS_RESULT_SUCCESS; + return tnfs_error != TNFS_RESULT_SUCCESS ? NETPROTO_ERR_UNSPECIFIED : NETPROTO_ERR_NONE; } off_t NetworkProtocolTNFS::seek(off_t offset, int whence) diff --git a/lib/network-protocol/TNFS.h b/lib/network-protocol/TNFS.h index dac248b03..a7597da58 100755 --- a/lib/network-protocol/TNFS.h +++ b/lib/network-protocol/TNFS.h @@ -27,14 +27,14 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd) override; + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame) override; + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; /** * @brief execute a command that returns a payload to the atari. @@ -42,14 +42,14 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; + netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; + netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief Rename file specified by incoming devicespec. @@ -57,7 +57,7 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t rename(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Delete file specified by incoming devicespec. @@ -65,7 +65,7 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t del(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Make directory specified by incoming devicespec. @@ -73,7 +73,7 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t mkdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief Remove directory specified by incoming devicespec. @@ -81,7 +81,7 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t rmdir(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief lock file specified by incoming devicespec. @@ -89,7 +89,7 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t lock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; /** * @brief unlock file specified by incoming devicespec. @@ -97,9 +97,9 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param cmdFrame the command frame * @return TRUE on error, FALSE on success */ - virtual bool unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; + netProtoErr_t unlock(PeoplesUrlParser *url, cmdFrame_t *cmdFrame) override; - virtual off_t seek(off_t offset, int whence) override; + off_t seek(off_t offset, int whence) override; protected: @@ -127,31 +127,31 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @brief Open file handle, set fd * @return FALSE if successful, TRUE on error. */ - virtual bool open_file_handle() override; + netProtoErr_t open_file_handle() override; /** * @brief Open directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool open_dir_handle() override; + netProtoErr_t open_dir_handle() override; /** * @brief Do TNFS mount * @param url The URL to mount * @return false on no error, true on error. */ - virtual bool mount(PeoplesUrlParser *url) override; + netProtoErr_t mount(PeoplesUrlParser *url) override; /** * @brief Unmount TNFS server specified in mountInfo. * @return false on no error, true on error. */ - virtual bool umount() override; + netProtoErr_t umount() override; /** * @brief Translate filesystem error codes to Atari error codes. Sets error in Protocol. */ - virtual void fserror_to_error() override; + void fserror_to_error() override; /** * @brief Read from file handle @@ -159,14 +159,14 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param len the number of bytes requested * @return FALSE if success, TRUE if error */ - virtual bool read_file_handle(uint8_t *buf, unsigned short len) override; + netProtoErr_t read_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief read next directory entry. * @param buf the target buffer * @param len length of target buffer */ - virtual bool read_dir_entry(char *buf, unsigned short len) override; + netProtoErr_t read_dir_entry(char *buf, unsigned short len) override; /** * @brief for len requested, break up into number of required @@ -174,19 +174,19 @@ class NetworkProtocolTNFS : public NetworkProtocolFS * @param len Requested # of bytes. * @return TRUE on error, FALSE on success. */ - virtual bool write_file_handle(uint8_t *buf, unsigned short len) override; + netProtoErr_t write_file_handle(uint8_t *buf, unsigned short len) override; /** * @brief close file handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_file_handle() override; + netProtoErr_t close_file_handle() override; /** * @brief Close directory handle * @return FALSE if successful, TRUE on error. */ - virtual bool close_dir_handle() override; + netProtoErr_t close_dir_handle() override; private: /** @@ -217,7 +217,7 @@ class NetworkProtocolTNFS : public NetworkProtocolFS /** * @brief get status of file, filling in filesize. mount() must have already been called. */ - virtual bool stat() override; + netProtoErr_t stat() override; }; #endif /* NETWORKPROTOCOLTNFS_H */ diff --git a/lib/network-protocol/Telnet.cpp b/lib/network-protocol/Telnet.cpp index 982e0f0ca..88ff8892a 100755 --- a/lib/network-protocol/Telnet.cpp +++ b/lib/network-protocol/Telnet.cpp @@ -1,6 +1,6 @@ /** * NetworkProtocolTELNET - * + * * TELNET Protocol Adapter Implementation */ @@ -102,7 +102,7 @@ NetworkProtocolTELNET::~NetworkProtocolTELNET() * @param len number of bytes to read. * @return error flag. FALSE if successful, TRUE if error. */ -bool NetworkProtocolTELNET::read(unsigned short len) +netProtoErr_t NetworkProtocolTELNET::read(unsigned short len) { std::vector newData = std::vector(len); @@ -114,7 +114,7 @@ bool NetworkProtocolTELNET::read(unsigned short len) if (!client.connected()) { error = NETWORK_ERROR_NOT_CONNECTED; - return true; // error + return NETPROTO_ERR_UNSPECIFIED; // error } // Do the read from client socket. @@ -126,7 +126,7 @@ bool NetworkProtocolTELNET::read(unsigned short len) if (errno == ECONNRESET) { error = NETWORK_ERROR_CONNECTION_RESET; - return true; + return NETPROTO_ERR_UNSPECIFIED; } } @@ -143,7 +143,7 @@ bool NetworkProtocolTELNET::read(unsigned short len) * @param len The # of bytes to transmit, len should not be larger than buffer. * @return Number of bytes written. */ -bool NetworkProtocolTELNET::write(unsigned short len) +netProtoErr_t NetworkProtocolTELNET::write(unsigned short len) { Debug_printf("NetworkProtocolTELNET::write(%u)\r\n", len); @@ -151,7 +151,7 @@ bool NetworkProtocolTELNET::write(unsigned short len) if (!client.connected()) { error = NETWORK_ERROR_NOT_CONNECTED; - return len; // error + return NETPROTO_ERR_UNSPECIFIED; // error } // Call base class to do translation. @@ -164,13 +164,13 @@ bool NetworkProtocolTELNET::write(unsigned short len) if (errno == ECONNRESET) { error = NETWORK_ERROR_CONNECTION_RESET; - return len; + return NETPROTO_ERR_UNSPECIFIED; } // Return success error = 1; - return false; + return NETPROTO_ERR_NONE; } void NetworkProtocolTELNET::flush(const char *buf, unsigned short size) diff --git a/lib/network-protocol/Telnet.h b/lib/network-protocol/Telnet.h index 80c36d361..1e5f6495c 100755 --- a/lib/network-protocol/Telnet.h +++ b/lib/network-protocol/Telnet.h @@ -26,14 +26,14 @@ class NetworkProtocolTELNET : public NetworkProtocolTCP * @param len Number of bytes to read. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool read(unsigned short len); + netProtoErr_t read(unsigned short len) override; /** * @brief Write len bytes from tx_buf to protocol. * @param len The # of bytes to transmit, len should not be larger than buffer. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool write(unsigned short len); + netProtoErr_t write(unsigned short len) override; /** * Get Receive Buffer @@ -56,7 +56,7 @@ class NetworkProtocolTELNET : public NetworkProtocolTCP int newRxLen; char ttype[32]="dumb"; - + }; -#endif /* NETWORKPROTOCOL_TELNET */ \ No newline at end of file +#endif /* NETWORKPROTOCOL_TELNET */ diff --git a/lib/network-protocol/Test.cpp b/lib/network-protocol/Test.cpp index 1e759b0bd..1def75d3d 100755 --- a/lib/network-protocol/Test.cpp +++ b/lib/network-protocol/Test.cpp @@ -20,7 +20,7 @@ NetworkProtocolTest::~NetworkProtocolTest() test_data.clear(); } -bool NetworkProtocolTest::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTest::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) { NetworkProtocol::open(urlParser, cmdFrame); @@ -51,15 +51,15 @@ bool NetworkProtocolTest::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame break; } - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolTest::close() +netProtoErr_t NetworkProtocolTest::close() { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolTest::read(unsigned short len) +netProtoErr_t NetworkProtocolTest::read(unsigned short len) { if (receiveBuffer->length() == 0) *receiveBuffer += test_data.substr(0, len); @@ -74,9 +74,9 @@ bool NetworkProtocolTest::read(unsigned short len) return NetworkProtocol::read(len); } -bool NetworkProtocolTest::write(unsigned short len) +netProtoErr_t NetworkProtocolTest::write(unsigned short len) { - bool err = false; + netProtoErr_t err = NETPROTO_ERR_NONE; Debug_printf("NetworkProtocolTest::write(%u) - Before translate_transmit_buffer()", len); for (int i = 0; i < len; i++) @@ -95,7 +95,7 @@ bool NetworkProtocolTest::write(unsigned short len) return err; } -bool NetworkProtocolTest::status(NetworkStatus *status) +netProtoErr_t NetworkProtocolTest::status(NetworkStatus *status) { status->rxBytesWaiting = test_data.length(); status->connected = 1; @@ -103,7 +103,7 @@ bool NetworkProtocolTest::status(NetworkStatus *status) NetworkProtocol::status(status); - return false; + return NETPROTO_ERR_NONE; } uint8_t NetworkProtocolTest::special_inquiry(uint8_t cmd) @@ -111,17 +111,17 @@ uint8_t NetworkProtocolTest::special_inquiry(uint8_t cmd) return 0xFF; // selected command not implemented. } -bool NetworkProtocolTest::special_00(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTest::special_00(cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolTest::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTest::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolTest::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolTest::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { - return false; + return NETPROTO_ERR_NONE; } diff --git a/lib/network-protocol/Test.h b/lib/network-protocol/Test.h index b68e16c5f..42487898c 100755 --- a/lib/network-protocol/Test.h +++ b/lib/network-protocol/Test.h @@ -30,47 +30,47 @@ class NetworkProtocolTest : public NetworkProtocol * @param urlParser The URL object passed in to open. * @param cmdFrame The command frame to extract aux1/aux2/etc. */ - virtual bool open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame); + netProtoErr_t open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) override; /** * @brief Close connection to the protocol. */ - virtual bool close(); + netProtoErr_t close() override; /** * @brief Read len bytes into rx_buf, If protocol times out, the buffer should be null padded to length. * @param len Number of bytes to read. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool read(unsigned short len); + netProtoErr_t read(unsigned short len) override; /** * @brief Write len bytes from tx_buf to protocol. * @param len The # of bytes to transmit, len should not be larger than buffer. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool write(unsigned short len); + netProtoErr_t write(unsigned short len) override; /** * @brief Return protocol status information in provided NetworkStatus object. * @param status a pointer to a NetworkStatus object to receive status information * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool status(NetworkStatus *status); + netProtoErr_t status(NetworkStatus *status) override; /** * @brief Return a DSTATS byte for a requested COMMAND byte. * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd); + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame); + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; /** * @brief execute a command that returns a payload to the atari. @@ -78,14 +78,14 @@ class NetworkProtocolTest : public NetworkProtocol * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; private: /** @@ -94,4 +94,4 @@ class NetworkProtocolTest : public NetworkProtocol std::string test_data; }; -#endif /* NETWORKPROTOCOL_TEST */ \ No newline at end of file +#endif /* NETWORKPROTOCOL_TEST */ diff --git a/lib/network-protocol/UDP.cpp b/lib/network-protocol/UDP.cpp index a2b5da0b3..4423c464c 100755 --- a/lib/network-protocol/UDP.cpp +++ b/lib/network-protocol/UDP.cpp @@ -30,7 +30,7 @@ NetworkProtocolUDP::~NetworkProtocolUDP() Debug_printf("NetworkProtocolUDP::dtor\r\n"); } -bool NetworkProtocolUDP::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolUDP::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) { Debug_printf("NetworkProtocolUDP::open(%s:%s)\r\n", urlParser->host.c_str(), urlParser->port.c_str()); @@ -47,7 +47,7 @@ bool NetworkProtocolUDP::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) if (urlParser->port.empty()) { Debug_printf("Port is empty, aborting.\r\n"); - return true; + return NETPROTO_ERR_UNSPECIFIED; } else { @@ -66,7 +66,7 @@ bool NetworkProtocolUDP::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) if (udp.begin(bind_port) == false) { errno_to_error(); - return true; + return NETPROTO_ERR_UNSPECIFIED; } else { @@ -80,10 +80,10 @@ bool NetworkProtocolUDP::open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) // call base class NetworkProtocol::open(urlParser, cmdFrame); - return false; // all good. + return NETPROTO_ERR_NONE; // all good. } -bool NetworkProtocolUDP::close() +netProtoErr_t NetworkProtocolUDP::close() { // Call base class. NetworkProtocol::close(); @@ -91,10 +91,10 @@ bool NetworkProtocolUDP::close() // unbind. udp.stop(); - return false; // all good. + return NETPROTO_ERR_NONE; // all good. } -bool NetworkProtocolUDP::read(unsigned short len) +netProtoErr_t NetworkProtocolUDP::read(unsigned short len) { std::vector newData = std::vector(len); @@ -105,7 +105,7 @@ bool NetworkProtocolUDP::read(unsigned short len) if (udp.available() == 0) { errno_to_error(); - return true; + return NETPROTO_ERR_UNSPECIFIED; } // Do the read. @@ -118,11 +118,11 @@ bool NetworkProtocolUDP::read(unsigned short len) // Return success Debug_printf("errno = %u\r\n", errno); error = 1; - + return NetworkProtocol::read(len); } -bool NetworkProtocolUDP::write(unsigned short len) +netProtoErr_t NetworkProtocolUDP::write(unsigned short len) { // Call base class to do translation. len = translate_transmit_buffer(); @@ -133,14 +133,14 @@ bool NetworkProtocolUDP::write(unsigned short len) if (dest.empty()) { error = NETWORK_ERROR_NOT_CONNECTED; - return len; // error + return NETPROTO_ERR_UNSPECIFIED; // error } // Do the write to client socket. if (udp.beginPacket(dest.c_str(), port) == false) { errno_to_error(); - return true; + return NETPROTO_ERR_UNSPECIFIED; } udp.write((uint8_t *)transmitBuffer->data(), len); @@ -148,17 +148,17 @@ bool NetworkProtocolUDP::write(unsigned short len) if (udp.endPacket() == false) { errno_to_error(); - return true; + return NETPROTO_ERR_UNSPECIFIED; } // Return success error = 1; transmitBuffer->erase(0, len); - return false; + return NETPROTO_ERR_NONE; } -bool NetworkProtocolUDP::status(NetworkStatus *status) +netProtoErr_t NetworkProtocolUDP::status(NetworkStatus *status) { if (receiveBuffer->length() > 0) @@ -168,7 +168,7 @@ bool NetworkProtocolUDP::status(NetworkStatus *status) in_addr_t addr = udp.remoteIP(); status->rxBytesWaiting = udp.parsePacket(); - + // Only change dest if we need to. #ifdef ESP_PLATFORM if (udp.remoteIP() != IPADDR_NONE) @@ -186,7 +186,7 @@ bool NetworkProtocolUDP::status(NetworkStatus *status) NetworkProtocol::status(status); - return false; + return NETPROTO_ERR_NONE; } uint8_t NetworkProtocolUDP::special_inquiry(uint8_t cmd) @@ -206,39 +206,39 @@ uint8_t NetworkProtocolUDP::special_inquiry(uint8_t cmd) return 0xFF; } -bool NetworkProtocolUDP::special_00(cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolUDP::special_00(cmdFrame_t *cmdFrame) { - return true; // none implemented. + return NETPROTO_ERR_UNSPECIFIED; // none implemented. } -bool NetworkProtocolUDP::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolUDP::special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { #ifdef ESP_PLATFORM - return true; // none implemented. + return NETPROTO_ERR_UNSPECIFIED; // none implemented. #else switch (cmdFrame->comnd) { case 'r': return get_remote(sp_buf, len); default: - return true; + return NETPROTO_ERR_UNSPECIFIED; } #endif } -bool NetworkProtocolUDP::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) +netProtoErr_t NetworkProtocolUDP::special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) { switch (cmdFrame->comnd) { case 'D': return set_destination(sp_buf, len); default: - return true; + return NETPROTO_ERR_UNSPECIFIED; } - return true; + return NETPROTO_ERR_UNSPECIFIED; } -bool NetworkProtocolUDP::set_destination(uint8_t *sp_buf, unsigned short len) +netProtoErr_t NetworkProtocolUDP::set_destination(uint8_t *sp_buf, unsigned short len) { #ifdef ESP_PLATFORM // TODO review & merge std::string path((const char *)sp_buf, len); @@ -251,10 +251,10 @@ bool NetworkProtocolUDP::set_destination(uint8_t *sp_buf, unsigned short len) int port_colon = path.find_last_of(":"); if (device_colon == std::string::npos) - return true; + return NETPROTO_ERR_UNSPECIFIED; if (port_colon == device_colon) - return true; + return NETPROTO_ERR_UNSPECIFIED; #ifdef ESP_PLATFORM // TODO review & merge std::string new_dest_str = path.substr(device_colon + 1, port_colon - 2); @@ -268,11 +268,11 @@ bool NetworkProtocolUDP::set_destination(uint8_t *sp_buf, unsigned short len) port = atoi(new_port_str.c_str()); dest = new_dest_str; - return false; // no error. + return NETPROTO_ERR_NONE; // no error. } #ifndef ESP_PLATFORM -bool NetworkProtocolUDP::get_remote(uint8_t *sp_buf, unsigned short len) +netProtoErr_t NetworkProtocolUDP::get_remote(uint8_t *sp_buf, unsigned short len) { char port_part[8]; @@ -281,7 +281,7 @@ bool NetworkProtocolUDP::get_remote(uint8_t *sp_buf, unsigned short len) strlcat((char *)sp_buf, port_part, len); Debug_printf("UDP remote is %s\n", sp_buf); - return false; // no error. + return NETPROTO_ERR_NONE; // no error. } #endif diff --git a/lib/network-protocol/UDP.h b/lib/network-protocol/UDP.h index 32e3cc694..cf0218482 100755 --- a/lib/network-protocol/UDP.h +++ b/lib/network-protocol/UDP.h @@ -26,47 +26,47 @@ class NetworkProtocolUDP : public NetworkProtocol * @param urlParser The URL object passed in to open. * @param cmdFrame The command frame to extract aux1/aux2/etc. */ - virtual bool open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame); + netProtoErr_t open(PeoplesUrlParser *urlParser, cmdFrame_t *cmdFrame) override; /** * @brief Close connection to the protocol. */ - virtual bool close(); + netProtoErr_t close() override; /** * @brief Read len bytes into rx_buf, If protocol times out, the buffer should be null padded to length. * @param len Number of bytes to read. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool read(unsigned short len); + netProtoErr_t read(unsigned short len) override; /** * @brief Write len bytes from tx_buf to protocol. * @param len The # of bytes to transmit, len should not be larger than buffer. * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool write(unsigned short len); + netProtoErr_t write(unsigned short len) override; /** * @brief Return protocol status information in provided NetworkStatus object. * @param status a pointer to a NetworkStatus object to receive status information * @return error flag. FALSE if successful, TRUE if error. */ - virtual bool status(NetworkStatus *status); + netProtoErr_t status(NetworkStatus *status) override; /** * @brief Return a DSTATS byte for a requested COMMAND byte. * @param cmd The Command (0x00-0xFF) for which DSTATS is requested. * @return a 0x00 = No payload, 0x40 = Payload to Atari, 0x80 = Payload to FujiNet, 0xFF = Command not supported. */ - virtual uint8_t special_inquiry(uint8_t cmd); + uint8_t special_inquiry(uint8_t cmd) override; /** * @brief execute a command that returns no payload * @param cmdFrame a pointer to the passed in command frame for aux1/aux2/etc * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_00(cmdFrame_t *cmdFrame); + netProtoErr_t special_00(cmdFrame_t *cmdFrame) override; /** * @brief execute a command that returns a payload to the atari. @@ -74,17 +74,17 @@ class NetworkProtocolUDP : public NetworkProtocol * @param len Length of data to request from protocol. Should not be larger than buffer. * @return error flag. TRUE on error, FALSE on success. */ - virtual bool special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_40(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; /** * @brief execute a command that sends a payload to fujinet (most common, XIO) * @param sp_buf, a pointer to the special buffer, usually a EOL terminated devicespec. * @param len length of the special buffer, typically SPECIAL_BUFFER_SIZE */ - virtual bool special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame); + netProtoErr_t special_80(uint8_t *sp_buf, unsigned short len, cmdFrame_t *cmdFrame) override; protected: - + /** * Object representing UDP endpoint */ @@ -110,7 +110,7 @@ class NetworkProtocolUDP : public NetworkProtocol * @param sp_buf pointer to received special buffer. * @param len of special received buffer */ - bool set_destination(uint8_t *sp_buf, unsigned short len); + netProtoErr_t set_destination(uint8_t *sp_buf, unsigned short len); #ifndef ESP_PLATFORM /** @@ -118,7 +118,7 @@ class NetworkProtocolUDP : public NetworkProtocol * @param sp_buf pointer to transmit special buffer. * @param len of special transmit buffer */ - bool get_remote(uint8_t *sp_buf, unsigned short len); + netProtoErr_t get_remote(uint8_t *sp_buf, unsigned short len); #endif private: @@ -130,4 +130,4 @@ class NetworkProtocolUDP : public NetworkProtocol bool is_multicast(in_addr_t addr); }; -#endif /* NETWORKPROTOCOL_UDP */ \ No newline at end of file +#endif /* NETWORKPROTOCOL_UDP */